尝试解析json字符串时出错org.json.jsonexception:jsonarray文本必须以“[”开头

amrnrhlw  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(454)

我试图解析一个json字符串,以便将其转换为一个数组,并通过索引遍历每个元素。下面是我的代码:

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);

运行此代码时,出现以下错误:

Exception in thread "main" org.json.JSONException: A JSONArray text must start with '[' at 1 [character 2 line 1]

我试着用不同的方式来塑造我的身体:

String body = "[{\"user\":\"d26d0op3-7da5-6ad8\",\"instanceId\":\"12784949-2b8c-827d\"}]";

但后来我发现了以下错误:

Exception in thread "main" org.json.JSONException: JSONArray[0] is not a String.

如何正确解析json?

piah890a

piah890a1#

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

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}

如果需要一些对象的列表:

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}]
rkue9o1l

rkue9o1l2#

您可能想了解一下json格式。尝试http://json.org .
在你的第一个案例中, body 是json“object”,不是数组。这类似于字典,或者key:value pair Map。json对象用{和}分隔。
要分析此正文,可以使用:

JSONObject job = new JSONObject(body);
String username = job.getString("user");

我想那可能就是你想要的。
在第二种情况下,主体是一个包含一个json对象的json数组。json数组由[和]分隔
如果您想要一个字符串的json数组,它应该是这样的:

body = "[ \"a\", \"b\", \"c\" ]";

整数数组如下所示:

body = "[ 1,2,3,4 ]";
cuxqih21

cuxqih213#

字符串body=“{”user“:”d26d0op3-6ad8“,”pass“:”12784949-827d“}”不是数组enter image description here
您可以转换成json数组,如下字符串body=“[{”user“:”d26d0op3-7da5-6ad8”,“pass“:”12784949-2b8c-827d“}]”;

相关问题