在颤动中 - 我如何最好地处理和分配预先确定的键给 json 中的嵌套列表/数组

Posted

技术标签:

【中文标题】在颤动中 - 我如何最好地处理和分配预先确定的键给 json 中的嵌套列表/数组【英文标题】:In flutter - how do I best handle and assign predetermined keys to nested lists/arrays in json 【发布时间】:2020-11-20 21:58:45 【问题描述】:

我通过 ble 发送数据并压缩了 json 字符串。 json 包含三个数组。

"b":false,"l":261,"a":["0.5","1.8","2.9","1.0"]

我有一个模型类 Notify。我需要为“a”创建一个模型类,为列表中的每个值分配一个预定义的键,但我不确定最好的方法。这些值始终按特定顺序出现。

class Notify
  bool b;
  int l;
  List<String> a;

  Notify(this.b, this.a, this.d, this.p);

  Notify.fromJson(Map<String, dynamic> json) 
  b = json['b'];
  l = json['l'];
  a = json['a'].cast<String>();
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['b'] = this.b;
    data['l'] = this.l;
    data['a'] = this.a;
    return data;
  

我迷路了。在这门课上,我认为我需要:

    将“a”数组转换为列表。 将字符串转换为双精度。 转换为为“a”列表中的四个项目提供 a0、a1、a2、a3 键的 Map。 在 a0-a3 的基础上再向整个类/地图添加四个项目。示例:a4 = a0 * -1、a5 = a1 * -1、a6 = a2 * -1、a7 = a3。 使其可供 Notify 类使用。
    class A 
      double a0;
      double a1;
      double a2;
      double a3;
      double a4;
      double a5;
      double a6;
      double a7;
    
      A a;
    
      A(this.a0, this.a1, this.a2, this.a3, this.a4, this.a5, this.a6, this.a7);
    
      A.fromJson(List<double> json)
// Do bring it in as a list?
        List<double> angleValuesList = List<double>.from(json);
        List<String> angleKeysList = ['a0', 'a1', 'a2', 'a3'];
        Map<String, double> angleMap = Map.fromIterables(angleKeysList, angleValuesList);
// Then I map the first four values to a0-a3
        //now lost..... how do I get close to items 3-5?
        
      

我希望我的地图看起来像这样,这样我就可以从中创建一个对象并将其放入流中。我每 16 毫秒收到一次这个数据包:

"b":false,"l":261,"a":["a0": "0.5", "a1":"1.8", "a2":"2.9", "a3":"1.0", "a4": "-0.5", "a5":"-1.8", "a6":"-2.9", "a7":"-1.0"]

感谢您抽出宝贵时间阅读本文!

【问题讨论】:

maps 应该使用,list 应该使用[],list 是数组的另一个名称,你的问题不清楚,我想问题是关于将 json 解析为数据类型!对 @neuromancer 很抱歉造成混乱。我糊涂了。你的回答很有帮助。问题是关于解析 json,尤其是“a”列表。一旦它被解析到列表中,我想将它映射到一些键值,并根据列表中的这四个项目向映射中添加更多键值对。 1) 将这四个列表值映射到 a0、a1、a2、a3(按此顺序),然​​后根据这四个初始值向该映射添加另外四个项目(键/值)。 ("a4" = a0 * -1), ("a5" = a1 * -1), ("a6" = a2 * -1), ("a7" = a3 * -1)。然后将它们传递给一个类以创建对象。上面的示例最终 json/map。 【参考方案1】:

如果你像这样使用json.decode(data) 解析这个"b":false,"l":261,"a":["0.5","1.8","2.9","1.0"],你最终会得到这个

data = "b":false,"l":261,"a":["0.5","1.8","2.9","1.0"]

步骤

Map<String,dynamic> map = json.decode(data);
//as you know the data you have provided
bool b = map['b'] as bool;
int l = map['l'] as int;
//as the list is of type string ["2.2","3.1"]
List<String> a = List.castFrom(map['a']);//or map['a'] as Map<String>
//if the list could have been of type double [2.2,3.1,4.2]
List<double> a = List.castFrom(map['a']);//or map['a'] as Map<double>

【讨论】:

以上是关于在颤动中 - 我如何最好地处理和分配预先确定的键给 json 中的嵌套列表/数组的主要内容,如果未能解决你的问题,请参考以下文章

如何从飞镖颤动中的键或键值对获取索引

无法读取表键但在颤动中获取实时数据库中的键值

如何递归地分配 perl 多维哈希的键的值,其中该键类似于嵌套键的值?

如何在颤动中获取设备ID

如何最好地比较两个编译的二进制文件? [关闭]

如何动态添加solr中的键值对?