【发布时间】:2019-01-08 06:43:52
【问题描述】:
我正在尝试解析如下所示的 JSON 文件:
[
{"character": "㐭", "definition": "blabla", "pinyin": ["lin"]},
// some more
{"character": "㐱", "definition": "blabla", "pinyin": ["zhen"]}
]
附:我在 json 文件中没有 // some more
位于 res/raw/dictionary.json 文件夹中。但我得到了异常Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $。我得到这样的数据:
InputStream is = getResources().openRawResource(R.id.dictionary);
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try {
Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
int n;
while((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
finish(); // For now just finishing activity, gonna add handling later
} catch (IOException e) {
e.printStackTrace();
finish();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
finish();
}
}
String json = writer.toString();
JSONArray dictionary = new JSONArray(json);
// Do stuff with Array
首先我认为错误是由于我用来解析 json 的方式而出现的,但是当我注释掉然后删除所有解析机制时,它仍然向我显示了这个错误。似乎在android加载资源时会发生这种情况,但我不确定。我尝试将 json 修改为以下内容:
{
"characters": [
{"character": "㐭", "definition": "blabla", "pinyin": ["lin"]},
// some more
{"character": "㐱", "definition": "blabla", "pinyin": ["zhen"]}
]
}
并改变解析机制
// Get resources
String json = writer.toString();
JSONObject dictionaryObj = new JSONObject(json);
JSONArray dictionary = dictionaryObj.getJSONArray("characters");
但这也无济于事。这里有什么问题?
注意:问题是我什至无法测试任何解决方案,因为未加载活动,错误出现在 gradle build 期间,在“运行任务”部分
【问题讨论】:
-
错误的是你试图将它作为
JSONObject作为根对象接收,而它是JSONArray。 -
@JeelVankhede,对不起,我现在要编辑,当我修改 JSON 以使用上一个代码 sn-p 中的对象时,我复制了代码。首先我尝试接收数组
-
@JeelVankhede,啊不,我写的一切都是正确的,我试图先将它作为 JSONArray 接收,然后更改为 JSONObject
-
分享你的Json解析代码
-
@Anmol,我现在把它添加到帖子中