【问题标题】:How to parse JSON Object containing array with no name如何解析包含没有名称的数组的 JSON 对象
【发布时间】:2019-10-26 16:20:27
【问题描述】:

我需要解析一个如下所示的 JSON 对象(它没有数组名称):

{
"id": "123123",
[{
"id": "456456",
"name": "name1",
"content": "content1"
}, {
"id": "789789",
"name": "name2",
"content": "content2"
}]
}

我有两个看起来像这样的对象:

public class MyFirstObject {
    private String id;
    private List<MySecondObject> lst_entries;
}

public class MySecondObject {
    private String id;
    private String name;
    private String content;
}

如果原始 JSON 没有该对象的名称,我如何解析 MySecondObject 的列表?

我一直在 stackoverflow 中寻找类似的东西,但无法找到与我类似的答案或案例可以提供帮助......

感谢您的帮助。谢谢!

【问题讨论】:

  • 您的 Json 格式错误将您的 json 放入 jsonformater jsonformatter.curiousconcept.com 网站它会显示您的 json 无效
  • 是的!我虽然也一样,但他们就是这样寄给我的……甚至不知道他们是如何格式化错误的
  • 这个String to json 可以帮助你。
  • 我不需要将 String 转换为 Json 我需要做相反的事情
  • 我认为这个 json 字符串不是用于 java,而是用于 c 或 c++,请检查这个simdjson,这会将你的 json 解析为 DOM 结构。不是 java 对象。

标签: android json parsing gson


【解决方案1】:

如果你坚持解析无效的 JSON,可以通过蛮力来完成。使用正则表达式分隔id字符串和数组字符串,使用它们构造有效的JSON然后转换为对象。
但是,这样的做法是非常不恰当的。最好只要求提供者修改它。

【讨论】:

  • 更好的解决方案是要求提供者修改它,始终尽量避免暴力破解。感谢您的帮助!
【解决方案2】:

首先是您的 JSON 格式错误。我猜你打错了。所以你有的是。

{
"id": "123123",
[{
"id": "456456",
"name": "name1",
"content": "content1"
}, {
"id": "789789",
"name": "name2",
"content": "content2"
}]
}

上述 JSON 中的第二项是一个数组,缺少其名称。而且您不能将项目放入没有名称的 json 对象中。它应该始终在名称和值对中。 所以如果你想让上面的 JSON 有效,它会是这样的。

{
    "id": "123123",
    "users": [{
        "id": "456456",
        "name": "name1",
        "content": "content1"
    }, {
        "id": "789789",
        "name": "name2",
        "content": "content2"
    }]
} 

这是一个有效的 JSON。现在您可以轻松解析它。

try {
        JSONObject obj = new JSONObject(jsonString);

    //getting the id
    String id = obj.getString("id");

    //getting the users
    JSONArray users = obj.getJSONArray("users");

    //users is a JSON array so you need to loop through it
    for(int i = 0; i<users.length(); i++){

        //getting every user from the array 
        JSONObject objUser = users.getJSONObject(i);

        //reading user values 
        String uid = objUser.getString("id");
        String name = objUser.getString("name");
        String content  = objUser.getString("content");

    }

} catch (JSONException e) {
    e.printStackTrace();
}

谢谢 :) 如果您想快速了解 JSON,可以查看我在 YouTube 上的 7 分钟 JSON 视频。 Learn JSON in 7 Minutes

【讨论】:

  • 我知道它可能是格式错误的,它在标题上说,但我想知道是否有可能的方法,因为他们这样发送给我,他们希望我解析它...
  • 你可以解析它,但不能解析为 json。实际上,您可以借助字符串函数从第一个方括号到最后一个方括号获取字符串,然后您就有一个可以轻松解析的正确 json 数组。
猜你喜欢
  • 2023-03-25
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
  • 2013-08-13
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 2020-01-08
相关资源
最近更新 更多