Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
颤振:将JSON文件的特定字段连接在一起,形成一个列表_Json_List_Flutter_Dart - Fatal编程技术网

颤振:将JSON文件的特定字段连接在一起,形成一个列表

颤振:将JSON文件的特定字段连接在一起,形成一个列表,json,list,flutter,dart,Json,List,Flutter,Dart,我有一个json文件,其中包含不同类型的数据列表 我想加入每个城市所有景点的“名称”字段,作为一个列表。 加入后的预期结果,例如Longo city,如下所示: { "city": "London", "attractions": [ { "name": "Attraction1", "localrank": 10

我有一个json文件,其中包含不同类型的数据列表

我想加入每个城市所有景点的“名称”字段,作为一个列表。 加入后的预期结果,例如Longo city,如下所示:

  {
    "city": "London",
    "attractions": [
      {
        "name": "Attraction1",
        "localrank": 10,
        "intrank": 4
      },
      {
        "name": "Attraction2",
        "localrank": 4,
        "intrank": 5
      }
    ]
  },
  {
    "city": "Hong Kong",
    "attractions": [
      {
        "name": "Attraction3",
        "localrank": 10,
        "intrank": 4
      },
      {
        "name": "Attraction4",
        "localrank": 4,
        "intrank": 5
      }
    ]
  },
  {
    "city": "Cario",
    "attractions": [
      {
        "name": "Attraction5",
        "localrank": 10,
        "intrank": 4
      },
      {
        "name": "Attraction6",
        "localrank": 4,
        "intrank": 5
      }
    ]
  }
] 
吸引1

吸引2

JSON文件中的数据结构如下:

  {
    "city": "London",
    "attractions": [
      {
        "name": "Attraction1",
        "localrank": 10,
        "intrank": 4
      },
      {
        "name": "Attraction2",
        "localrank": 4,
        "intrank": 5
      }
    ]
  },
  {
    "city": "Hong Kong",
    "attractions": [
      {
        "name": "Attraction3",
        "localrank": 10,
        "intrank": 4
      },
      {
        "name": "Attraction4",
        "localrank": 4,
        "intrank": 5
      }
    ]
  },
  {
    "city": "Cario",
    "attractions": [
      {
        "name": "Attraction5",
        "localrank": 10,
        "intrank": 4
      },
      {
        "name": "Attraction6",
        "localrank": 4,
        "intrank": 5
      }
    ]
  }
] 
我使用了以下代码,但出现了一个错误:

cities.attractions.name.join("\n")
Json模型类如下所示:

List<Cities> citiesFromJson(String str) =>
    List<Cities>.from(json.decode(str).map((x) => Cities.fromJson(x)));
String citiesToJson(List<Cities> data) =>
    json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class Cities {
  Cities({
    this.city,
    this.attractions,
  });

  String city;
  List<Attraction> attractions;

  factory Cities.fromRawJson(String str) => Cities.fromJson(json.decode(str));

  String toRawJson() => json.encode(toJson());

  factory Cities.fromJson(Map<String, dynamic> json) => Cities(
        city: json["city"],
        attractions: List<Attraction>.from(
            json["attractions"].map((x) => Attraction.fromJson(x))),
      );

  Map<String, dynamic> toJson() => {
        "city": city,
        "attractions": List<dynamic>.from(attractions.map((x) => x.toJson())),
      };
}

class Attraction {
  Attraction({
    this.name,
    this.localrank,
    this.intrank,
  });

  String name;
  int localrank;
  int intrank;

  factory Attraction.fromRawJson(String str) =>
      Attraction.fromJson(json.decode(str));

  String toRawJson() => json.encode(toJson());

  factory Attraction.fromJson(Map<String, dynamic> json) => Attraction(
        name: json["name"],
        localrank: json["localrank"],
        intrank: json["intrank"],
      );

  Map<String, dynamic> toJson() => {
        "name": name,
        "localrank": localrank,
        "intrank": intrank,
      };
}
List citiesFromJson(字符串str)=>
List.from(json.decode(str.map)(x)=>Cities.fromJson(x));
字符串citiesToJson(列表数据)=>
encode(List.from(data.map((x)=>x.toJson());
阶级城市{
城市({
这个城市,
这个,景点,,
});
字符串城市;
列出景点;
factory Cities.fromRawJson(String str)=>Cities.fromJson(json.decode(str));
字符串toRawJson()=>json.encode(toJson());
工厂城市。fromJson(映射json)=>城市(
城市:json[“城市”],
景点:列表(
json[“景点”].map((x)=>Attraction.fromJson(x)),
);
映射到JSON()=>{
“城市”:城市,
“景点”:List.from(attractions.map((x)=>x.toJson()),
};
}
班级吸引力{
吸引({
这个名字,
这个.localrank,
这是内特克,
});
字符串名;
int localrank;
内部网;
工厂吸引力。fromRawJson(字符串str)=>
fromJson(json.decode(str));
字符串toRawJson()=>json.encode(toJson());
工厂吸引力。fromJson(映射json)=>吸引力(
名称:json[“名称”],
localrank:json[“localrank”],
内部网:json[“内部网”],
);
映射到JSON()=>{
“姓名”:姓名,
“localrank”:localrank,
“内部网”:内部网,
};
}
这也调用了json文件:

  Future<String> fetchData() async {
    String data =
        await DefaultAssetBundle.of(context).loadString("assets/data.json");
    final jsonResult = json.decode(data);
    print('$jsonResult oop');
    this.setState(() {
      jsonResult.forEach(
          (element) => Globals.citylist.add(new Cities.fromJson(element)));
    });
    return "Success!";
  }

Future fetchData()异步{
字符串数据=
等待DefaultAssetBundle.of(context.loadString(“assets/data.json”);
最终jsonResult=json.decode(数据);
打印(“$jsonResult oop”);
此.setState(){
jsonResult.forEach(
(element)=>Globals.citylist.add(newcities.fromJson(element));
});
返回“成功!”;
}

类似的方法应该可以:

import 'dart:convert';

var data = """  [{
    "city": "London",
    "attractions": [
      {
        "name": "Attraction1",
        "localrank": 10,
        "intrank": 4
      },
      {
        "name": "Attraction2",
        "localrank": 4,
        "intrank": 5
      }
    ]
  },
  {
    "city": "Hong Kong",
    "attractions": [
      {
        "name": "Attraction3",
        "localrank": 10,
        "intrank": 4
      },
      {
        "name": "Attraction4",
        "localrank": 4,
        "intrank": 5
      }
    ]
  },
  {
    "city": "Cario",
    "attractions": [
      {
        "name": "Attraction5",
        "localrank": 10,
        "intrank": 4
      },
      {
        "name": "Attraction6",
        "localrank": 4,
        "intrank": 5
      }
    ]
  }
] """;

List<Cities> citiesFromJson(String str) =>
    List<Cities>.from(json.decode(str).map((x) => Cities.fromJson(x)));
String citiesToJson(List<Cities> data) =>
    json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class Cities {
  Cities({
    this.city,
    this.attractions,
  });

  String city;
  List<Attraction> attractions;

  factory Cities.fromRawJson(String str) => Cities.fromJson(json.decode(str));

  String toRawJson() => json.encode(toJson());

  factory Cities.fromJson(Map<String, dynamic> json) => Cities(
    city: json["city"],
    attractions: List<Attraction>.from(
        json["attractions"].map((x) => Attraction.fromJson(x))),
  );

  Map<String, dynamic> toJson() => {
    "city": city,
    "attractions": List<dynamic>.from(attractions.map((x) => x.toJson())),
  };
}

class Attraction {
  Attraction({
    this.name,
    this.localrank,
    this.intrank,
  });

  String name;
  int localrank;
  int intrank;

  factory Attraction.fromRawJson(String str) =>
      Attraction.fromJson(json.decode(str));

  String toRawJson() => json.encode(toJson());

  factory Attraction.fromJson(Map<String, dynamic> json) => Attraction(
    name: json["name"],
    localrank: json["localrank"],
    intrank: json["intrank"],
  );

  Map<String, dynamic> toJson() => {
    "name": name,
    "localrank": localrank,
    "intrank": intrank,
  };
}

class Globals {
  static List<Cities> citylist = [];
}

Future<String> fetchData() async {
  // String data =
  // await DefaultAssetBundle.of(context).loadString("assets/data.json");
  final jsonResult = json.decode(data);
  print('$jsonResult oop');
  // this.setState(() {
    jsonResult.forEach(
            (element) => Globals.citylist.add(new Cities.fromJson(element)));
  // });

  var result = getAttractionsByCity('London');

  print(result.join('\n'));

  return "Success!";
}

List<String> getAttractionsByCity(String value) {
  var result = <String>[];

  for (final city in Globals.citylist) {
    if (city.city == value) {
      final attractions = city.attractions;

      for (final attraction in attractions) {
        result.add(attraction.name);
      }
    }
  }

  return result;
}

void main() async {
  await fetchData();
}
导入'dart:convert';
var data=“”[{
“城市”:“伦敦”,
“景点”:[
{
“名称”:“吸引1”,
“localrank”:10,
“内部链接”:4
},
{
“名称”:“属性2”,
“localrank”:4,
“内部链接”:5
}
]
},
{
“城市”:“香港”,
“景点”:[
{
“名称”:“Attraction3”,
“localrank”:10,
“内部链接”:4
},
{
“名称”:“吸引4”,
“localrank”:4,
“内部链接”:5
}
]
},
{
“城市”:“卡里奥”,
“景点”:[
{
“名称”:“吸引物5”,
“localrank”:10,
“内部链接”:4
},
{
“名称”:“吸引6”,
“localrank”:4,
“内部链接”:5
}
]
}
] """;
列表citiesFromJson(字符串str)=>
List.from(json.decode(str.map)(x)=>Cities.fromJson(x));
字符串citiesToJson(列表数据)=>
encode(List.from(data.map((x)=>x.toJson());
阶级城市{
城市({
这个城市,
这个,景点,,
});
字符串城市;
列出景点;
factory Cities.fromRawJson(String str)=>Cities.fromJson(json.decode(str));
字符串toRawJson()=>json.encode(toJson());
工厂城市。fromJson(映射json)=>城市(
城市:json[“城市”],
景点:列表(
json[“景点”].map((x)=>Attraction.fromJson(x)),
);
映射到JSON()=>{
“城市”:城市,
“景点”:List.from(attractions.map((x)=>x.toJson()),
};
}
班级吸引力{
吸引({
这个名字,
这个.localrank,
这是内特克,
});
字符串名;
int localrank;
内部网;
工厂吸引力。fromRawJson(字符串str)=>
fromJson(json.decode(str));
字符串toRawJson()=>json.encode(toJson());
工厂吸引力。fromJson(映射json)=>吸引力(
名称:json[“名称”],
localrank:json[“localrank”],
内部网:json[“内部网”],
);
映射到JSON()=>{
“姓名”:姓名,
“localrank”:localrank,
“内部网”:内部网,
};
}
类全局{
静态列表citylist=[];
}
Future fetchData()异步{
//字符串数据=
//等待DefaultAssetBundle.of(context.loadString(“assets/data.json”);
最终jsonResult=json.decode(数据);
打印(“$jsonResult oop”);
//此.setState(){
jsonResult.forEach(
(element)=>Globals.citylist.add(newcities.fromJson(element));
// });
var结果=getAttractionsByCity(“伦敦”);
打印(result.join('\n'));
返回“成功!”;
}
列表getAttractionsByCity(字符串值){
var结果=[];
for(Globals.citylist中的最终城市){
如果(city.city==值){
最终景点=城市景点;
用于(景点中的最终景点){
结果.添加(吸引力.名称);
}
}
}
返回结果;
}
void main()异步{
等待获取数据();
}

这是一个有效的例子。您可以将此代码复制并粘贴到HTTP://dartpad.dev并运行它以查看结果。

您应该首先将json解析到dart。我已经在dart中完成了解析,但代码太长,无法包含在此处。我能够在listview生成器中使用所有这些字段。我现在需要的是一种连接每个城市属性的文本字段的方法。我建议只将名称添加到列表中。例如:[“景点1”、“景点2”]。然后,当您想展示它时,请在后面的每条字符串之间添加“\n”。我举了一个例子,我有一个非常大的城市列表及其吸引人的地方。我需要通过编程来完成这项工作。@ChessMax答案是我想的,请检查这是否有助于您的案例谢谢,但我在cities“error:for”循环中使用的类型“type”必须实现Iterable。“cities是保存JSON数据的变量的名称。如果变量有另一个名称,只需更改