【问题标题】:JSON Array Of Entries to POJOPOJO 的 JSON 条目数组
【发布时间】:2015-06-09 18:41:10
【问题描述】:

我有一个 JSON 文件,它在一个数组中包含多个条目。这些条目中的每一个都需要映射到一个 java 对象。这是我正在测试的 JSON 字符串(http://jsonlint.com/ 验证了下面的 JSON,但我必须删除我在实际 Java 测试中使用的所有转义字符),

  [{
    "LocId":99,
    "typeId":99,
    "name":"foo",
    "parentId":99,
    "geoCode":
    {
      "type":"foo",
      "coordinates":
      [{
        "latitude":99.0,
        "longitude":99.0
      }]
    }
  ,
    "LocId":8,
    "typeId":99,
    "name":"foo",
    "parentId":99,
    "geoCode":
    {
      "type":"foo",
      "coordinates":
      [{
        "latitude":99.0,
        "longitude":99.0
      }]
    }
  }]

我是这样读取这个字符串的,

    String str = "The JSON string shown above";
    InputStream is = new ByteArrayInputStream(str.getBytes());
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    LocIdClass[] locations = new Gson().fromJson(br, LocIdClass[].class);

但我的位置数组的大小始终为 1,并且仅存储 JSON 字符串中的最后一个条目。

    for(int i=0; i<locations.length; i++)
        System.out.println(locations[i]);

    System.out.println("The size of the array is " + locations.length);

我不确定为什么只检索 JSON 字符串中的最后一个条目而跳过其他条目。我参考了这篇 SO 帖子来找出 POJO 数组 Jackson - Json to POJO With Multiple Entries

【问题讨论】:

  • 您的数据正确吗?当第二个对象启动时,它似乎缺少{
  • jsonlint.com 中成功验证为正确的 JSON。我可以通过查看它来判断它是 JSON 数组中的两个实体,并且语法对我来说是正确的。
  • 查看jsonlint文本区格式化后的json:原来“json”的一整段被去掉了。
  • 哦,哇,我没注意到。问题出在哪里。
  • 你将如何正确地重写它,因为它看起来像是具有两个对象的数组所需的格式。

标签: java arrays json gson


【解决方案1】:

您当前的 json 负载有错误,试试这个:

    [
        {
            "LocId": 99,
            "typeId": 99,
            "name": "foo",
            "parentId": 99,
            "geoCode": {
                "type": "foo",
                "coordinates": [
                    {
                        "latitude": 99,
                        "longitude": 99
                    }
                ]
            }
        },
        {
            "LocId": 8,
            "typeId": 99,
            "name": "foo",
            "parentId": 99,
            "geoCode": {
                "type": "foo",
                "coordinates": [
                    {
                        "latitude": 99,
                        "longitude": 99
                    }
                ]
            }
        }
    ]

编辑:为避免以后出现此问题,您可以使用 jsonlint.com 来检查您的 json。确保它符合您的预期。

【讨论】:

  • 我对此感到困惑。如果您在“坐标”键下查看我的数组,则“纬度”和“经度”用逗号分隔,即它们没有括在自己的括号中。为什么最外面的数组会有所不同?
  • 纬度和经度在同一个对象内。如果您有一个经度对象的纬度列表,它的行为方式与您的位置数组相同。
  • 那么这是一种特殊情况,当你有一个最外层的初始对象数组时?我想这意味着没有未显示的大/根对象。我希望这是有道理的......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 2019-08-10
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多