Flutter 在颤振中使用JsonSerializable时如何识别动态键?
让我们假设,直到最近,我还收到了下面的Flutter 在颤振中使用JsonSerializable时如何识别动态键?,flutter,dart,Flutter,Dart,让我们假设,直到最近,我还收到了下面的Json响应 { "AA": { "product": { "id":"111", "type":"C" } } } 而且,我已经编写了下面的代码,model.dart来将json转换为object 模型.省道 @JsonSerializable() class ResponseGate { @JsonKey(name: "AA") AA aa;
Json响应
{
"AA": {
"product": {
"id":"111",
"type":"C"
}
}
}
而且,我已经编写了下面的代码,model.dart
来将json转换为object
模型.省道
@JsonSerializable()
class ResponseGate {
@JsonKey(name: "AA")
AA aa;
ResponseGate({this.aa});
factory ResponseGate.fromJson(Map<String, dynamic> json) =>
_$ResponseGateFromJson(json);
}
@JsonSerializable()
class AA {
@JsonKey(name: "product")
Product product;
AA(this.product);
factory AA.fromJson(Map<String, dynamic> json) => _$AAFromJson(json);
}
@JsonSerializable()
class Product {
@JsonKey(name: "id")
var id;
@JsonKey(name: "type")
var type;
Product(this.id, this.type);
factory Product.fromJson(Map<String, dynamic> json) =>
_$ProductFromJson(json);
}
只是钥匙(AA和BB)不同,但它们的子项是相同的。我必须做些什么才能使我的代码识别所有的键并使用model.dart
从json转换为model
if (thirdResponse.statusCode == 200) {
var map = json.decode(thirdResponse.body) as Map<String, dynamic>;
ResponseGate responseGate = new ResponseGate.fromJson(map);
else {
throw Exception('Failed to load post: ${thirdResponse.statusCode}');
}
if(thirdResponse.statusCode==200){
var map=json.decode(thirdResponse.body)作为map;
ResponseGate ResponseGate=newresponsegate.fromJson(map);
否则{
抛出异常('未能加载post:${thirdResponse.statusCode}');
}
不要使用模型尝试将您的响应放在地图中
那么比如说
{
"AA": {
"product": {
"id":"111",
"type":"C"
}
},
"BB": {
"product": {
"id":"222",
"type":"d"
}
}
}
如果您想要“BB”产品“id”
那样会很糟糕的
map['BB']['product']['id']
不要使用模型试图把你的反应放在地图上 那么比如说
{
"AA": {
"product": {
"id":"111",
"type":"C"
}
},
"BB": {
"product": {
"id":"222",
"type":"d"
}
}
}
如果您想要“BB”产品“id”
那样会很糟糕的
map['BB']['product']['id']
我看到你有解码的地图,这是我测试的代码
映射
var数据={
“AA”:{
“产品”:{
“id”:“111”,
“类型”:“C”
}
},
“BB”:{
“产品”:{
“id”:“222”,
“类型”:“d”
}
}
};
var list=新列表();
data.forEach((键,值){
列表。添加(值);
});
打印(列表);
产品
对于(列表中的var productInfo)
{
Product Product=new Product.fromJson(productInfo);
//将产品添加到您的列表。。。
}
或者你可以把两者结合起来,也可以得到钥匙
data.forEach((key, value){
Product product = new Product.fromJson(value);
// add product to your List...
// or make a Map to store (key, product)
});
但还有另一种方法,将api修改为数组,并使json响应更有意义
[
{
"productName": "AA"
"id":"222",
"type":"d"
}
]
我只是在开玩笑说最后的方法,因为你没有太多地谈论你的场景。我看到你有解码的地图,所以这是我测试的代码
映射
var数据={
“AA”:{
“产品”:{
“id”:“111”,
“类型”:“C”
}
},
“BB”:{
“产品”:{
“id”:“222”,
“类型”:“d”
}
}
};
var list=新列表();
data.forEach((键,值){
列表。添加(值);
});
打印(列表);
产品
对于(列表中的var productInfo)
{
Product Product=new Product.fromJson(productInfo);
//将产品添加到您的列表。。。
}
或者你可以把两者结合起来,也可以得到钥匙
data.forEach((key, value){
Product product = new Product.fromJson(value);
// add product to your List...
// or make a Map to store (key, product)
});
但还有另一种方法,将api修改为数组,并使json响应更有意义
[
{
"productName": "AA"
"id":"222",
"type":"d"
}
]
最后一种方法只是开玩笑,因为你没有太多地谈论你的场景。你是说api中的JSON在数组的情况下使用
object
而不是array
?如果这是真的,你可能需要先编写自定义解析器,然后在解析后使用JsonSerializable
。你能告诉我如何进行自定义吗解析器?你是说api中的JSON在数组的情况下使用object
而不是array
?如果这是真的,你可能需要先编写自定义解析器,然后在解析后使用JsonSerializable
。你能告诉我如何做自定义解析器吗?有人能解释为什么吗?有人能解释为什么吗?