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