6

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.

3 Answers 3

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));
Sign up to request clarification or add additional context in comments.

Comments

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"} 

2 Comments

You don't need to use a Future.
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. github.com/dart-gde/chrome.dart/blob/master/lib/src/…
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 ] ) );
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.