change api to take a string yay!
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index 3ab3e97..b427227 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -59,6 +59,12 @@
 
   @override
   List<String> get extraRequiredLibraries => _requiredLibraries[name];
+  
+  @override
+  List<String> get extraIndexedLibraries => const <String>[
+        // Required for the JsonDecodeExperimentalTransformer.
+        "dart:convert",
+      ];
 
   @override
   bool mayDefineRestrictedType(Uri uri) =>
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index 623e157..95f051a 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -68,6 +68,7 @@
   List<String> get extraIndexedLibraries => const [
         'dart:async',
         'dart:collection',
+        'dart:convert',
         'dart:html',
         'dart:indexed_db',
         'dart:math',
diff --git a/pkg/kernel/lib/transformations/json_decode_experimental.dart b/pkg/kernel/lib/transformations/json_decode_experimental.dart
index cc56d3e..cc72c8a 100644
--- a/pkg/kernel/lib/transformations/json_decode_experimental.dart
+++ b/pkg/kernel/lib/transformations/json_decode_experimental.dart
@@ -32,8 +32,25 @@
         procedure.name.name == 'jsonDecodeExperimental') {
       // We know we have exactly one type argument.
       var typeArg = node.arguments.types.first as InterfaceType;
-      var expr = _newInstance(typeArg, node.arguments.positional.first);
-      print(expr.leakingDebugToString());
+      var jsonVar = VariableDeclaration(
+        'json',
+        type: const DynamicType(),
+        initializer: StaticInvocation(
+            coreTypes.index
+                .getLibrary('dart:convert')
+                .procedures
+                .firstWhere((p) => p.name.name == 'jsonDecode'),
+            Arguments(node.arguments.positional)),
+      );
+      var expr = MethodInvocation(
+          FunctionExpression(FunctionNode(
+            Block([
+              jsonVar,
+              ReturnStatement(_newInstance(typeArg, VariableGet(jsonVar))),
+            ]),
+          )),
+          Name('call'),
+          Arguments.empty());
       return expr;
     } else {
       return node;
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index 7f1b1964..40020fa 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -125,6 +125,8 @@
         // could possibly be done more cleanly after the VM no longer supports
         // doing constant evaluation on its own. See http://dartbug.com/32836
         "dart:typed_data",
+        // Required for the JsonDecodeExperimentalTransformer.
+        "dart:convert",
       ];
 
   @override