Is it possible to convert a javascript object or array back to native dart Map and/or List? I'm trying to get a manifest file returned from javascript as Object and want to convert it to a Dart Map object.
Asked
Active
Viewed 1,553 times
3 Answers
4
You can convert a javascript JSON to a Dart JSON with :
import 'dart:json';
import 'package:js/js.dart' as js;
convert(js.Proxy jsonProxy) => JSON.parse(js.context.JSON.stringify(jsonProxy));

Alexandre Ardhuin
- 71,959
- 15
- 151
- 132
3
You could use the built in Javascript method JSON.stringify() from the Javascript context.
Future getManifest() {
var completer = new Completer();
js.scoped(() {
var chrome = js.context.chrome;
var manifest_proxy = chrome.runtime.getManifest();
var manifest_string = js.context.JSON.stringify(manifest_proxy);
var manifest = JSON.parse(manifest_string);
logger.fine("manifest_string = $manifest_string");
completer.complete(manifest);
});
return completer.future;
}
Which would print out the following to the console and send the completer a dart Map.
manifest_string = {"app":{"background":{"scripts":["main.js"]}},"manifest_version":2,"minimum_chrome_version":"23","name":"chrome.dart - test","version":"1"}

Alexandre Ardhuin
- 71,959
- 15
- 151
- 132

adam-singer
- 4,489
- 4
- 21
- 25
-
1You don't need to use a `Future`. – Alexandre Ardhuin Dec 18 '12 at 19:56
-
Nice, so being scoped does not require a Future return. In this library I started using Future as a pattern to most of the calls provided by chrome.* apis. If this is the case then I should only need Futures for methods that require callbacks. http://goo.gl/x2H2K – adam-singer Dec 18 '12 at 23:01
2
Many changes in API was done by this year, following code is Alexandre Ardhuin's answer adapted to latest (#30104) Dart Sdk
import "dart:convert";
import "dart:js" as js;
convert( js.JsObject object )
{
return JSON.decode( js.context['JSON'].callMethod("stringify", [ object ] ) );
}

MDerks
- 123
- 5