首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试分析JSON字符串时出错。org.json.JSONException: JSONArray文本必须以'[‘开头

尝试分析JSON字符串时出错。org.json.JSONException: JSONArray文本必须以'[‘开头
EN

Stack Overflow用户
提问于 2020-12-08 00:46:46
回答 3查看 86关注 0票数 0

我正在尝试解析一个JSON字符串,这样我就可以将其转换为一个数组,并通过索引遍历每个元素。下面是我的代码:

代码语言:javascript
运行
复制
String body = "{\"user\":\"d26d0op3-7da5-6ad8\",\"pass\":\"12784949-2b8c-827d\"}";

ArrayList<String> stringArray = new ArrayList<String>();

JSONArray jsonArray = new JSONArray(body);

for (int i = 0; i < jsonArray.length(); i++) {
    stringArray.add(jsonArray.getString(i));
}

System.out.println(stringArray);

当我运行这段代码时,我得到以下错误:

代码语言:javascript
运行
复制
Exception in thread "main" org.json.JSONException: A JSONArray text must start with '[' at 1 [character 2 line 1]

我尝试以不同的方式格式化我的身体:

代码语言:javascript
运行
复制
String body = "[{\"user\":\"d26d0op3-7da5-6ad8\",\"instanceId\":\"12784949-2b8c-827d\"}]";

但随后我得到了以下错误:

代码语言:javascript
运行
复制
Exception in thread "main" org.json.JSONException: JSONArray[0] is not a String.

如何正确解析我的JSON?

EN

回答 3

Stack Overflow用户

发布于 2020-12-08 01:16:52

您可能需要阅读一些有关JSON格式的内容。试试http://json.org

在第一种情况下,body是一个JSON‘对象’,而不是一个数组。这类似于字典或键:值对映射。JSON对象用{和}分隔。

要解析这个正文,您可以使用:

代码语言:javascript
运行
复制
JSONObject job = new JSONObject(body);
String username = job.getString("user");

我想这可能就是你想要的。

在第二种情况下,主体是一个包含一个JSON对象的JSON数组。JSON数组由和分隔

如果你想要一个JSON字符串数组,它应该看起来像这样:

代码语言:javascript
运行
复制
 body = "[ \"a\", \"b\", \"c\" ]";

整数数组如下所示:

代码语言:javascript
运行
复制
 body = "[ 1,2,3,4 ]";
票数 1
EN

Stack Overflow用户

发布于 2020-12-08 02:47:02

您可以使用ObjectMapper.readValue(String, Class)方法将json字符串中的值解析为某个对象。在这种情况下,它可以是一个Map<String, String>

代码语言:javascript
运行
复制
String body = "{\"user\":\"d26d0op3-6ad8\",\"pass\":\"12784949-827d\"}";

Map<String, String> map = new ObjectMapper().readValue(body, Map.class);

System.out.println(map); // {user=d26d0op3-6ad8, pass=12784949-827d}

如果您希望看到一些对象的列表:

代码语言:javascript
运行
复制
String body = "[{\"user\":\"d26d0op3-6ad8\",\"pass\":\"12784949-827d\"}]";

List<Object> list = new ObjectMapper().readValue(body, List.class);

System.out.println(list); // [{user=d26d0op3-6ad8, pass=12784949-827d}]
票数 0
EN

Stack Overflow用户

发布于 2020-12-09 11:07:24

字符串体= "{"user":"d26d0op3-6ad8","pass":"12784949-827d"}“不是数组enter image description here

可以转换为json数组,字符串body = "{"user":"d26d0op3-7da5-6ad8","pass":"12784949-2b8c-827d"}";

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65185861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档