2015-11-07 5 views
1

Я пытаюсь разобрать JSON на объект в Дарте, в документации используется Карта тип, чтобы разобрать ответ JSON.Разбор JSON в Dart

в отношении к их документации Using Dart with JSON Web Services: Parsing JSON , я отрезала следующий пример:

import 'dart:convert'; 

main() { 
    String mapAsJson = '{"language":"dart"}'; // input Map of data 
    Map parsedMap = JSON.decode(mapAsJson); 
    print(parsedMap["language"]); // dart 
} 

я применил то же самое в моем TestApp, однако он не работает

test() { 
    var url = "http://localhost/wptest/wp-json/wp/v2/posts"; 

    // call the web server asynchronously 
    var request = HttpRequest.getString(url).then(onDataLoaded); 
} 

onDataLoaded(String responseText) { 
    Map x = JSON.decode(responseText); 
    print(x['title'].toString()); 
} 

Я получаю ошибка

Exception: Uncaught Error: type 'List' is not a subtype of type 'Map' of 'x'. 
Stack Trace: 
    post.post (package:untitled8/wp/posts.dart:25:24) 
    onDataLoaded (http://localhost:63342/untitled8/web/index.dart:24:15) 
    _RootZone.runUnary (dart:async/zone.dart:1166) 
    _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:494) 
    _Future._propagateToListeners (dart:async/future_impl.dart:577) 
    _Future._completeWithValue (dart:async/future_impl.dart:368) 
    _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:422) 
    _microtaskLoop (dart:async/schedule_microtask.dart:43) 
    _microtaskLoopEntry (dart:async/schedule_microtask.dart:52) 
    _ScheduleImmediateHelper._handleMutation (dart:html:42567) 
+2

Создает ли ваш файл JSON массив? – stevenupton

+0

@stevenupton Да, ошибка была в том, что мой JSON был списком. Я отправлю ответ за несколько минут. –

ответ

0

Документация соответствует т.

//if JSON is an array (starts with '[') 

List<Map> x = JSON.decode(responseText); 
print(x[0]['title']); 

//if JSON is not an array (starts with '{') 

Map z = JSON.decode(responseText); 
print(z['content']); 
print(z['id']); 
print(z['title']);