You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON格式不匹配异常排查:提取photo_reference失败求助

提取JSON中photo_reference字段时遭遇格式不匹配异常

我最近在处理一段JSON数据,想从中提取photo_reference字段的字符串值,结果碰到了格式不匹配异常。我反复检查自己的逻辑,觉得没问题啊——异常明明出在result处理环节,但一眼就能看到results是个对象数组!

给定的JSON数据

{ 
  "html_attributions" : [], 
  "results" : [ 
    { 
      "name" : "Rhythmboat Cruises", 
      "photos" : [ 
        { , "photo_reference" : "CnRnAAAAF-LjFR1ZV93eawe1cU_3QNMCNmaGkowY7CnOf-kcNmPhNnPEG9W979jOuJJ1sGr75rhD5hqKzjD8vbMbSsRnq_Ni3ZIGfY6hKWmsOf3qHKJInkm4h55lzvLAXJVc-Rr4kI9O1tmIblblUpg2oqoq8RIQRMQJhFsTr5s9haxQ07EQHxoUO0ICubVFGYfJiMUPor1GnIWb5i8", "width" : 519 } 
      ], 
    }, 
    , { 
      "name" : "Bucks Party Cruise", 
      "photos" : [ 
        { "photo_reference" : "CnRnAAAA48AX5MsHIMiuipON_Lgh97hPiYDFkxx_vnaZQMOcvcQwYN92o33t5RwjRpOue5R47AjfMltntoz71hto40zqo7vFyxhDuuqhAChKGRQ5mdO5jv5CKWlzi182PICiOb37PiBtiFt7lSLe1SedoyrD-xIQD8xqSOaejWejYHCN4Ye2XBoUT3q2IXJQpMkmffJiBNftv8QSwF4", "width" : 800 } 
      ], 
    } 
  ]
}

我的提取代码

var arr: JSONArray = JSONArray(result) 
var jsonObject:JSONObject=arr.getJSONObject(0) 
var array:JSONArray=jsonObject.getJSONArray("photos") 
var obj:JSONObject=array.getJSONObject(0) 
var photoref:String=obj.getString("photo_reference")

问题根源分析

其实你的代码逻辑本身是没问题的,但给定的JSON存在语法错误,这才是导致解析失败的核心原因:

  • 第一个photos数组里的对象开头多了个逗号:{ , "photo_reference",这个多余的逗号会直接破坏JSON的结构
  • results数组中,第一个对象和第二个对象之间多了个逗号:}, , {,同样属于无效的JSON语法

JSON对语法要求非常严格,这些多余的逗号会让JSON解析器无法正确解析整个数据,自然在你尝试把result转换成JSONArray时抛出格式不匹配异常。另外,你的代码还有个小疏漏:原JSON的根节点是对象而非数组,直接用JSONArray(result)解析本身也是错误的。

修正方案

先把JSON修正为合法格式:

{ 
  "html_attributions" : [], 
  "results" : [ 
    { 
      "name" : "Rhythmboat Cruises", 
      "photos" : [ 
        { "photo_reference" : "CnRnAAAAF-LjFR1ZV93eawe1cU_3QNMCNmaGkowY7CnOf-kcNmPhNnPEG9W979jOuJJ1sGr75rhD5hqKzjD8vbMbSsRnq_Ni3ZIGfY6hKWmsOf3qHKJInkm4h55lzvLAXJVc-Rr4kI9O1tmIblblUpg2oqoq8RIQRMQJhFsTr5s9haxQ07EQHxoUO0ICubVFGYfJiMUPor1GnIWb5i8", "width" : 519 } 
      ]
    }, 
    { 
      "name" : "Bucks Party Cruise", 
      "photos" : [ 
        { "photo_reference" : "CnRnAAAA48AX5MsHIMiuipON_Lgh97hPiYDFkxx_vnaZQMOcvcQwYN92o33t5RwjRpOue5R47AjfMltntoz71hto40zqo7vFyxhDuuqhAChKGRQ5mdO5jv5CKWlzi182PICiOb37PiBtiFt7lSLe1SedoyrD-xIQD8xqSOaejWejYHCN4Ye2XBoUT3q2IXJQpMkmffJiBNftv8QSwF4", "width" : 800 } 
      ]
    } 
  ]
}

再调整代码,先解析根对象再获取results数组:

var rootObj: JSONObject = JSONObject(result)
var arr: JSONArray = rootObj.getJSONArray("results") 
var jsonObject: JSONObject = arr.getJSONObject(0) 
var array: JSONArray = jsonObject.getJSONArray("photos") 
var obj: JSONObject = array.getJSONObject(0) 
var photoref: String = obj.getString("photo_reference")

这样修正后,就能正常提取到photo_reference的值了。

内容的提问来源于stack exchange,提问作者Abdus Samad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:41:15