Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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_Flutter_Dart - Fatal编程技术网

迷失在翻译中:在颤振中解析JSON到对象的问题

迷失在翻译中:在颤振中解析JSON到对象的问题,json,flutter,dart,Json,Flutter,Dart,背景:项目使用JSON中的YelpAPI筛选业务数据。两种类型的端点是使用和。本项目的第一部分在解析business_search api、将其保存为字符串列表并在需要显示时转换为业务对象时按预期工作。JSON->对象代码如下所示: factory Business.fromJSON(Map<String, dynamic> json) { return Business( rating: json['rating'], price: json['pr

背景:项目使用JSON中的YelpAPI筛选业务数据。两种类型的端点是使用和。本项目的第一部分在解析business_search api、将其保存为字符串列表并在需要显示时转换为业务对象时按预期工作。JSON->对象代码如下所示:

factory Business.fromJSON(Map<String, dynamic> json) {
    return Business(
      rating: json['rating'],
      price: json['price'],
      phone: json['phone'],
      id: json['id'],
      name: json['name'],
      alias: json['alias'],
      isClosed: json['is_closed'],
      reviewCount: json['review_count'],
      url: json['url'],
      imageUrl: json['image_url'],
    );
  }
问题:我遇到了以下异常

[VERBOSE-2:ui_dart_state.cc(166)] Unhandled Exception: FormatException: Unexpected character (at character 2)
{id: D5dS2-8JXhZxo3BzMLV3xQ, alias: ichi-sushi-and-ramen...
 ^
调用、保存来自业务/详细信息的此响应并尝试将其转换为对象时:

json = {id: D5dS2-8JXhZxo3BzMLV3xQ, alias: ichi-sushi-and-ramen, name: Ichi sushi & ramen, image_url: https://s3-media1.fl.yelpcdn.com/bphoto/Phib_AwTkdD_kBV8r7179Q/o.jpg, is_claimed: true, is_closed: false, url: https://www.yelp.com/biz/ichi-sushi-and-ramen?adjust_creative=Aj73ii92JG9IDLNvRyn_Ow&utm_campaign=yelp_api_v3&utm_medium=api_v3_business_lookup&utm_source=Aj73ii92JG9IDLNvRyn_Ow, phone: +15836751500, display_phone: (583) 675-1500, review_count: 128, categories: [{alias: sushi, title: Sushi Bars}, {alias: ramen, title: Ramen}], rating: 4.5, location: {address1: 200 Country Rd, address2: null, address3: , city: Bayshore, zip_code: 11803, country: US, state: NY, display_address: [200 Country Rd, Bayshore, NY 11803], cross_streets: }, coordinates: {latitude: 40.92842, longitude: -73.116}, photos: [https://s3-media1.fl.yelpcdn.com/bphoto/Phib_AwTkdD_kBV8r7179Q/o.jpg, https://s3-media2.fl.yelpcdn.com/bp<…> (*My note: debugger truncates with <...>*)
json={id:D5dS2-8JXhZxo3BzMLV3xQ,别名:一寿司和拉面,名称:一寿司和拉面,图片url:https://s3-media1.fl.yelpcdn.com/bphoto/Phib_AwTkdD_kBV8r7179Q/o.jpg,是否声明:true,是否关闭:false,url:https://www.yelp.com/biz/ichi-sushi-and-ramen?adjust_creative=Aj73ii92JG9IDLNvRyn_Ow&utm_campaign=yelp_api_v3&utm_medium=api_v3_business_lookup&utm_source=Aj73ii92JG9IDLNvRyn_Ow,电话:+15836751500,显示电话:(583)675-1500,评论数量:128,类别:[{别名:寿司,标题:寿司酒吧},{别名:拉面,标题:拉面}],评级:4.5,地址:{地址1:200国家公路,地址2:null,地址3:,城市:海湾,邮编:11803,国家:美国,州:纽约,显示地址:[200 Country Rd,Bayshore,NY 11803],cross_streets:},坐标:{纬度:40.92842,经度:-73.116},照片:[https://s3-media1.fl.yelpcdn.com/bphoto/Phib_AwTkdD_kBV8r7179Q/o.jpg, https://s3-media2.fl.yelpcdn.com/bp (*我的注意:调试器截断为*)

这里出了什么问题?我一直在尝试许多(我指的是许多)不同的案例来排除问题所在,但找不到任何明显不对劲的地方。我能看到的唯一区别是,第一种类型的呼叫(业务/搜索)以“评级”开始,包含的字段较少,而第二种类型的呼叫(业务/详细信息)返回更多的数据(请注意,我不需要太多数据,因此在业务对象中也不需要它,但Yelp api的性质要求我以这种方式执行),并以“id”字段开头。这些差异是罪魁祸首吗?这个错误是什么意思?你能“插入”吗一个JSON指向一个字段多于所需属性的对象,因为我想让业务对象尽可能多用?不管怎样,这怎么解决?如果需要更多信息,请告诉我。谢谢你的帮助和时间!

在进一步分析代码之后,@KhashayarMotarjemi的建议给了我一个poss的提示可能存在的问题:数据的编码方式。为了保存数据,我通过toString()方法运行了JSON,剥离了数据中的所有“”并使其在以后从内存检索时无法正确解析为JSON。正确的方法是JSONECODE(yourData)因为这会将其转换为要保存的字符串,但会保留解码时所需的格式。因此,对于任何正在阅读的人来说,如果您试图将JSON存储为字符串,则必须使用JSONECODE()而不是toString()这样做的时候。我希望这可以帮助将来的人!

我认为问题在于JSON中的键周围没有双引号,请参阅。
json = {id: D5dS2-8JXhZxo3BzMLV3xQ, alias: ichi-sushi-and-ramen, name: Ichi sushi & ramen, image_url: https://s3-media1.fl.yelpcdn.com/bphoto/Phib_AwTkdD_kBV8r7179Q/o.jpg, is_claimed: true, is_closed: false, url: https://www.yelp.com/biz/ichi-sushi-and-ramen?adjust_creative=Aj73ii92JG9IDLNvRyn_Ow&utm_campaign=yelp_api_v3&utm_medium=api_v3_business_lookup&utm_source=Aj73ii92JG9IDLNvRyn_Ow, phone: +15836751500, display_phone: (583) 675-1500, review_count: 128, categories: [{alias: sushi, title: Sushi Bars}, {alias: ramen, title: Ramen}], rating: 4.5, location: {address1: 200 Country Rd, address2: null, address3: , city: Bayshore, zip_code: 11803, country: US, state: NY, display_address: [200 Country Rd, Bayshore, NY 11803], cross_streets: }, coordinates: {latitude: 40.92842, longitude: -73.116}, photos: [https://s3-media1.fl.yelpcdn.com/bphoto/Phib_AwTkdD_kBV8r7179Q/o.jpg, https://s3-media2.fl.yelpcdn.com/bp<…> (*My note: debugger truncates with <...>*)