在 Flutter 中从嵌套的 JSON 创建对象列表

圣诞节

有一个我解码为 JSON 的 URL 地址,还有一个我正在尝试将其转换为对象列表(书籍)的标题(结果)。
当我打印此标题的内容时,我确实得到了所需的结果(第一次打印),但是当我创建列表并尝试打印列表中第一个对象的一个​​字段时,没有打印任何内容(第二次打印)。
这意味着我创建列表的方式有问题,我找不到它。
我将衷心感谢您的帮助。

JSON结构:

{计数:9447,结果:[{book_about:string,book_label:string,book_wikilink:string,片段:[string1,string2,string3,string4],id:string,label:string,text:string]}

它的图片:https ://i.stack.imgur.com/w2JGm.png

我的代码:

Future<List<Book>> fetchBooks(http.Client client) async {

  var url = 'http://jbse.cs.technion.ac.il:3030/search?query=אברהם&start=0';
  final response = await http.get(Uri.parse(url),headers: {'Content-Type': 'application/json'});

  Map<String, dynamic> responseBody = jsonDecode(response.body);
  dynamic results = responseBody['result'];
  print(results);

  List<Book> list = results.map((book) => Book.fromJson(book)).toList();
  print(list.first.book_wikilink);
  return list;
}


class Book {
  String book_about;
  String book_label;
  String book_wikilink;
  List<String> fragments;
  String id;
  String label;
  String text;

  Book(
    this.book_about,
    this.book_label,
    this.book_wikilink,
    this.fragments,
    this.id,
    this.label,
    this.text
      );

  factory Book.fromJson(Map<String, dynamic> json) {
    return Book(
      json['book_about'],
      json['book_label'],
      json['book_wikilink'] ,
      json['fragments'],
      json['id'],
      json['label'],
      json['text'],
    );
  }
}


  
梅佐尼

您可以手动完成。
即时选择并转换您想要的内容(在解析期间)。

import 'package:fast_json/fast_json_selector.dart' as parser;
import 'package:http/http.dart' as http;

void main(List<String> args) async {
  final books = await fetchBooks();
  print('Found: ${books.length} book(s).');
  print(books.map((e) => e.label).join('\n'));
}

Future<List<Book>> fetchBooks() async {
  var url = 'http://jbse.cs.technion.ac.il:3030/search?query=אברהם&start=0';
  final response = await http
      .get(Uri.parse(url), headers: {'Content-Type': 'application/json'});
  return _findBooks(response.body);
}

List<Book> _findBooks(String source) {
  // Path to Book
  // Map => property "result" => List => list index => Map (Book)
  final level = '{} result [] 0 {}'.split(' ').length;
  final books = <Book>[];
  void select(parser.JsonSelectorEvent event) {
    if (event.levels.length == level) {
      final book = Book.fromJson(event.lastValue as Map);
      books.add(book);
      // Freeing the memory allocated for the book
      // because it is no longer needed
      event.lastValue = null;
    }
  }

  parser.parse(source, select: select);
  return books;
}

class Book {
  String book_about;
  String book_label;
  String book_wikilink;
  List<String> fragments;
  String id;
  String label;
  String text;

  Book(this.book_about, this.book_label, this.book_wikilink, this.fragments,
      this.id, this.label, this.text);

  factory Book.fromJson(Map json) {
    return Book(
      json['book_about'] as String,
      json['book_label'] as String,
      json['book_wikilink'] as String,
      (json['fragments'] as List).cast(),
      json['id'] as String,
      json['label'] as String,
      json['text'] as String,
    );
  }
}

输出:

Found: 10 book(s).
קדושת לוי וירא טו
חומת אנך בראשית יז כג
רא"ם בראשית כה יט
אור החיים בראשית כה יט
באר מים חיים בראשית כד לד
חזקוני בראשית כה יט
רש"י בראשית כה יט
שפתי חכמים בראשית יט כט
העמק דבר בראשית לא מב
רמב"ן בראשית כה יט

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章