【问题标题】:Complex JSON to Map复杂的 JSON 映射
【发布时间】:2021-08-15 01:07:57
【问题描述】:

我正在从 API 获取数据,响应如下

[{_id: 60adf4f56de76a8669ca6089, createdDate: 2021-05-26T07:12:53.928Z, name: Save, lastUpdatedDate: 2021-05-26T14:26:17.922Z, __v: 0, pageProperties: {0: {color: Color(0xffde0404)}}}]

我正在使用以下代码转换成地图

List data = json.decode(response.body);
    data.forEach((element) {
      Map object = element;
      print(object['pageProperties']); 
      Map properties = object['pageProperties']; //getting error here
      print(properties);
    });

它成功打印 'print(object['pageProperties']);'作为'{0:{颜色:颜色(0xffde0404)}}' 但现在我无法解析 '{0: {color: Color(0xffde0404)}}'

我收到错误,因为“期望值是 'Map' 类型的值,但得到的是 'String' 类型的值”

如何将“{0: {color: Color(0xffde0404)}}”转换为 Map

【问题讨论】:

  • 可以粘贴原始数据吗?也就是说,用引号来查看数据是如何传递的。

标签: flutter dart flutter-web


【解决方案1】:

您需要尝试将此值作为字符串处理并对其进行解码,例如:

final properties = json.decode(object['pageProperties']);
// Do something with properties here

【讨论】:

    【解决方案2】:

    假设“pageProperties”包含页面的更多属性,如颜色、页面索引等。

    首先你需要制作一个模型。

       class PageProperties{
    
       String color;
       int pageIndex;
     
    
      PageProperties(
      this.color,
      this.pageIndex,
      );
    
    PageProperties.fromJson(Map<String,dynamic> json){
    
    color= json['color'];
    pageIndex= json['pageIndex'];
    }
    
    Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    
    data['color'] = this.color;
    data['pageIndex'] = this.pageIndex;
    
    return data;
     }
    }
    

    现在上面的两个函数可以简化从 JSON 到 JSON 的转换。

    现在让我们将这个 pageProperties 列表作为某个类的变量,所以就这样做吧。

    Class Some{
      
     List<PageProperties> list;
     Some(this.pageProperties);
     
    
     Some.fromJson(Map<String,dynamic> json)
      {
       list = List<PageProperties>.from(
          jsonDecode(json['pageProperties']).map((model) =>
              PageProperties.fromJson(model)));
        }
      }
    

    现在上面做的是它接受 JSON 参数“pageProperties”,然后 对其进行解码,将其转换为 Map,然后使用我们创建的 .fromJson 函数将地图的每个子项转换为 PagePropeties。

    您可以每次都这样做,这是缩短代码的一个很好的做法。

    【讨论】:

      猜你喜欢
      • 2018-10-27
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 2014-03-02
      • 2012-04-19
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多