我有一个带有动态变化键的json对象,它随列表项的最后一个元素一起提供。基于这个keyList,我必须映射json响应。如何解析这种类型的json对象?
Json响应:
例如:1
[
{"ABC":100, "BVBV":200,"NBN":87,"MNM":09},
{"ABC":1004, "BVBV":90,"NBN":847,"MNM":049},
{"ABC":1040, "BVBV":2050,"NBN":867,"MNM":079},
{"overallScore":10000,"keyList":"ABC,BVBV,NBN,MNM"}
]例如:2
[
{"PQR":100, "XYZ":200,"POI":87,"IOK":09,"LOP":890,"MLP":678},
{"PQR":1004, "XYZ":90,"POI":847,"IOK":049,"LOP":890,"MLP":678},
{"PQR":1040, "XYZ":2050,"POI":867,"IOK":079,"LOP":890,"MLP":678},
{"overallScore":10000,"keyList":"PQR,XYZ,POI,IOK,LOP,MLP"}
]Json密钥基于json响应中的最后一个元素。
下面是预期的json映射,
{
value1 = json[json['keyList'].split(',')[0]],
value2 = json[json['keyList'].split(',')[1]],
value3 = json[json['keyList'].split(',')[2]],
value4 = json[json['keyList'].split(',')[3]],
value5 = json[json['keyList'].split(',')[4]],
..............
...............
...........
},
{
value1 = json[json['keyList'].split(',')[0]],
value2 = json[json['keyList'].split(',')[1]],
value3 = json[json['keyList'].split(',')[2]],
value4 = json[json['keyList'].split(',')[3]],
value5 = json[json['keyList'].split(',')[4]],
..............
...............
...........
},
......密钥列表将随机更改。
发布于 2020-06-20 22:46:01
我真的不确定这是不是你想要的,但这是我的实现:
import 'dart:convert';
import 'dart:io';
void main() {
final jsonEg1 = jsonDecode(eg1) as List<dynamic>;
final keyListEg1 = parseKeyList(jsonEg1);
print(keyListEg1);
// [ABC, BVBV, NBN, MNM]
print(parseElements(jsonEg1));
// [[100, 200, 87, 9], [1004, 90, 847, 49], [1040, 2050, 867, 79]]
final jsonEg2 = jsonDecode(eg2) as List<dynamic>;
final keyListEg2 = parseKeyList(jsonEg2);
print(keyListEg2);
// [PQR, XYZ, POI, IOK, LOP, MLP]
print(parseElements(jsonEg2));
// [[100, 200, 87, 9, 890, 678], [1004, 90, 847, 49, 890, 678], [1040, 2050, 867, 79, 890, 678]]
}
List<String> parseKeyList(List<dynamic> json) =>
((json.last as Map<String, dynamic>)['keyList'] as String).split(',');
List<List<int>> parseElements(List<dynamic> json) {
final result = json
.take(json.length - 1)
.cast<Map<String, dynamic>>()
.map((data) => parseKeyList(json).map((key) => data[key] as int).toList())
.toList();
return result;
}
const String eg1 = '''
[
{"ABC":100, "BVBV":200,"NBN":87,"MNM":9},
{"ABC":1004, "BVBV":90,"NBN":847,"MNM":49},
{"ABC":1040, "BVBV":2050,"NBN":867,"MNM":79},
{"overallScore":10000,"keyList":"ABC,BVBV,NBN,MNM"}
]
''';
const String eg2 = '''
[
{"PQR":100, "XYZ":200,"POI":87,"IOK":9,"LOP":890,"MLP":678},
{"PQR":1004, "XYZ":90,"POI":847,"IOK":49,"LOP":890,"MLP":678},
{"PQR":1040, "XYZ":2050,"POI":867,"IOK":79,"LOP":890,"MLP":678},
{"overallScore":10000,"keyList":"PQR,XYZ,POI,IOK,LOP,MLP"}
]
''';结果的数据结构不像您在问题中描述的那样,但这是因为这样做没有什么意义,因为它不能有效地扩展,并且值的数量是动态的。
取而代之的是,结果以List<List<int>>结构表示,因此第一结果第二值可以例如被提取为parsedElementsEg2[0][1],并且使得循环遍历这些值也变得更容易;
https://stackoverflow.com/questions/62486134
复制相似问题