JSONArray 抛出 JSONArray 文本必须以 '[' at 1 [character 2 line 1] 开始异常
Posted
技术标签:
【中文标题】JSONArray 抛出 JSONArray 文本必须以 \'[\' at 1 [character 2 line 1] 开始异常【英文标题】:JSONArray throws A JSONArray text must start with '[' at 1 [character 2 line 1] exceptionJSONArray 抛出 JSONArray 文本必须以 '[' at 1 [character 2 line 1] 开始异常 【发布时间】:2022-01-22 10:04:32 【问题描述】:以下 JSON 对象(名为 json_object
的变量)由两个值组成
都是数组:
"peripheral_devices": [
"_id": 1,
"active": -1,
"battery": "63",
"bt_firmware_version": "btv1.7.777",
"configured": 0,
"connected": 0,
"consumer_id": 22,
"create_date": 1635807323224,
"device_id": 72,
"discovered": 0,
"firmware_version": "v3.14",
"hardware_version": "null",
"icon": "icon_device_bp5",
"last_connect_date": 1640023710420,
"mac_address": "8C:DE:52:41:FC:57",
"model": "BP5 41FC57",
"name": "BP5",
"other_id": "-1",
"paired": -1,
"type_id": 1,
"update_date": 1635807323224,
"user_id": 13
,
"_id": 3,
"active": -1,
"battery": "90",
"bt_firmware_version": "1.0.0",
"configured": -1,
"connected": 0,
"consumer_id": 22,
"create_date": 1635807323239,
"device_id": 72,
"discovered": 0,
"firmware_version": "1.0.0",
"hardware_version": "5.0.0",
"icon": "icon_device_hs2s",
"last_connect_date": 1640022147928,
"mac_address": "00:4D:32:0C:B7:2C",
"model": "HS2S 11070",
"name": "HS2S",
"other_id": "-1",
"paired": -1,
"type_id": 3,
"update_date": 1635807323239,
"user_id": 13
],
"peripheral_tests": [
"_id": 199,
"consumer_id": 22,
"create_date": 1640020949760,
"end_date": 1640020949078,
"mood_id": -1,
"notes": "",
"start_date": 1640020939533,
"status_id": 1,
"type_id": 2,
"update_date": 0,
"user_id": -99
,
"_id": 198,
"consumer_id": 22,
"create_date": 1640020904183,
"end_date": -1,
"metric_bps": ,
"mood_id": -1,
"notes": "",
"start_date": 1640020863742,
"status_id": 1,
"type_id": 1,
"update_date": 0,
"user_id": -99
,
"_id": 197,
"consumer_id": 22,
"create_date": 1640020834664,
"end_date": 1640020828741,
"mood_id": -1,
"notes": "",
"start_date": 1640020822580,
"status_id": 1,
"type_id": 3,
"update_date": 0,
"user_id": -99
]
并派生如下:
JSONObject json_object = new JSONObject(post_data);
使用org.json.JSONArray.JSONArray
:
JSONArray peripheral_devices = json_object.getJSONArray("peripheral_devices");
按预期工作,从json_object
解析一个 json 数组。但是,使用相同的技术来获取对象中的第二个数组不会:
JSONArray json_tests = new JSONArray("peripheral_tests");
抛出异常:
A JSONArray text must start with '[' at 1 [character 2 line 1]
为什么?我不明白什么?
【问题讨论】:
我认为您的假设,即json_object
已经是 typeof JSONObject
可能是错误的......因为除非有根 JSONObject
的句柄,否则可能无法访问嵌套的 JSONArray
。 ... new
关键字 NEVER 是吸气剂。
@MartinZeitler - 是的,我已经编辑了我的帖子,展示了它是如何派生的。为什么你会认为不是?
@MartinZeitler - 感谢您发现我忽略的内容 - 我实际上并没有使用 json_object 来获取数组!哎呀,如果你愿意回答 - 我会给你信用。
【参考方案1】:
你编码
JSONArray json_tests = new JSONArray("peripheral_tests");
在构造函数中取字符串,这是 JSON 数据,peripheral_tests
不是 JSON 数组,要获取 peripheral_tests,你需要从 json_object
中获取它
JSONArray peripheral_devices = json_object.getJSONArray("peripheral_tests");
【讨论】:
【参考方案2】:输入的JSON无效,根据JSON Lint ...可能会导致意想不到的结果:
Error: Parse error on line 69:
..."metric_bps": , "mood_id": -1,
----------------------^
Expecting 'STRING', '', got ','
【讨论】:
以上是关于JSONArray 抛出 JSONArray 文本必须以 '[' at 1 [character 2 line 1] 开始异常的主要内容,如果未能解决你的问题,请参考以下文章
仅在启用 proguard 时 JSONArray 不是字符串异常
如何在 Xcode 中获取 JSONarray 值以显示在文本字段中? [关闭]
错误:“JSONArray文本必须以'['at 1 [character 2 line 1]”开头,不应该适用
JSONArray 到 ListView - AsyncTask