当前位置: 首页 > 知识库问答 >
问题:

是否可以在Flutter/Dart中解析缺少属性(json数据的键)的json?

洪华皓
2023-03-14

我有来自API的json形式的对象列表。这些对象有一些属性,问题是一些对象缺少属性。我的问题是:是否可以用颤振/飞镖分析这些数据?或者我必须更改为API响应,这样就不会缺少任何属性。

JSON数据:

[
    {
        "names": "Jean lewis  Mbayabu ",
        "users_name": "jeanlewis",
        "avt": "Image URL",
        "id": "32",
        "title": "Canada",
        "category": "student"
    },
    {
        "names": "Abhi Vish",
        "users_name": "abhi",
        "avt": "Image URL",
        "id": "59",
        "category": "student"
    },
    {
        "names": "Julie Mabengi",
        "users_name": "julie",
        "avt": "Image URL",
        "id": "116"
    }
]

共有1个答案

荀学文
2023-03-14

下面是一个如何操作的示例。我已将标题或类别设置为可空,因为我们并不总是有这两个字段:

import 'dart:convert';

const jsonString = '''
[
    {
        "names": "Jean lewis  Mbayabu ",
        "users_name": "jeanlewis",
        "avt": "Image URL",
        "id": "32",
        "title": "Canada",
        "category": "student"
    },
    {
        "names": "Abhi Vish",
        "users_name": "abhi",
        "avt": "Image URL",
        "id": "59",
        "category": "student"
    },
    {
        "names": "Julie Mabengi",
        "users_name": "julie",
        "avt": "Image URL",
        "id": "116"
    }
]
''';

class SearchedUser {
  final String names;
  final String users_name;
  final String avt;
  final int id;
  final String? title;
  final String? category;

  const SearchedUser(
      {required this.names,
      required this.users_name,
      required this.avt,
      required this.id,
      required this.title,
      required this.category});

  factory SearchedUser.fromJson(Map<String, dynamic> json) => SearchedUser(
      names: json['names'] as String,
      users_name: json['users_name'] as String,
      avt: json['avt'] as String,
      id: int.parse(json['id'] as String),
      title: json['title'] as String?,
      // title: json['title'] ?? "defaultTitle", // default title if field is absent or null
      category: json['category'] as String?);
      // category: json['category'] ?? "defaultCategory"); // default category if field is absent or null

  @override
  String toString() => 'names: $names, '
      'users_name: $users_name, '
      'avt: $avt, '
      'id: $id, '
      'title: $title, '
      'category: $category';
}

void main() {
  final jsonList = jsonDecode(jsonString) as List<dynamic>;
  final searchedUsers = [
    for (final map in jsonList.cast<Map<String, dynamic>>())
      SearchedUser.fromJson(map)
  ];

  searchedUsers.forEach(print);
  // names: Jean lewis  Mbayabu , users_name: jeanlewis, avt: Image URL, id: 32, title: Canada, category: student
  // names: Abhi Vish, users_name: abhi, avt: Image URL, id: 59, title: null, category: student
  // names: Julie Mabengi, users_name: julie, avt: Image URL, id: 116, title: null, category: null
}
 类似资料:
  • 我有来自API的json形式的对象列表。这些对象有一些属性,问题是一些对象缺少属性。那么如何无错误地解析其他属性的数据呢? 例如,我有这个缺少的属性 但这所有属性都存在:

  • 我从一个复杂的json中获取空数据,这里是json。当我试图解析它时,我得到了null。请看一看。 我已生成模型类:https://javiercbk.github.io/json_to_dart/ 生成模型类后,创建一个新的类名ModelClass。 另一个类名为APiResponse并编写代码:这个类获取api响应并返回响应:APiResponse。fromJson(jsonDecode(re

  • 我有一个来自API的xml。 当我尝试使用simplexml\u load\u字符串或simplexmlement进行解析时,我得到了这个结果。 [广告]= 重要的是缺少我需要的url visibleurl属性。我试着在网上找,浪费了一整天来解决这个问题,但没有答案。有人能纠正我正在做的错误吗? PHP代码:

  • 我使用的是Json。net将对象序列化到数据库。 我向类中添加了一个新属性(该属性在数据库的json中缺失),我希望新属性在json中缺失时具有默认值。 我尝试了DefaultValue属性,但它不起作用。我正在使用私有setter和构造函数来反序列化json,因此在构造函数中设置属性的值将不起作用,因为有一个带有该值的参数。 以下是一个例子: 我预计年龄是5岁,但现在是零岁。 有什么建议吗?

  • 问题内容: 我有一个包含格式错误的JSON的字符串,该字符串在缺少键的情况下提供给我。JSON的结构超出了我的控制范围,因此我需要使用已有的东西。我已经找到了OP可以在JavaScript中解析格式错误的JSON的解决方案,但是其中一个值包含一个RegEx匹配的URL,并将其转换为另一个键(如值),导致JSON真正损坏。有任何想法吗? 我也看过jsonrepair,但是在那里没有太大的成功。 问题

  • 我试图使用下面的代码将一个示例json文件读取到SqlContext中,但失败了,随后出现了datasource错误。 Java语言lang.ClassNotFoundException:未能找到数据源:json。请在以下位置查找包裹http://spark-packages.org位于组织。阿帕奇。火花sql。处决数据源。ResolvedDataSource美元。org上的lookUpdateS