簡體   English   中英

從Json對象中提取數組

[英]Extract array from Json object

我想使用GSON庫從Json Object中提取數組。

我已經嘗試創建類並讓Gson庫完成工作,但在這種特殊情況下它不起作用。

提取數據的類

public class Images {
        private Image[] images;

        public class Image {
            private String url;

            public Image(String url) {
                this.url = url;
            }

            public String getUrl() {
                return url;
            }
        }

        public Images(Image[] images) {
            this.images = images;
        }

        public Image[] getImages() {
            return images;
        }
    }

示例數據

...
,
"images": [
   {
     "url": "https://a.allegroimg.com/original/030516/a867b9dd4021b15678fc03a3981b"
    },
    {
       "url": "https://a.allegroimg.com/original/03da09/19740f7147ad929609cc2bcc499e"
    },
    {
        "url": "https://a.allegroimg.com/original/03198b/c024c7e448cab876bb49ad055567"
    },
    {
        "url": "https://a.allegroimg.com/original/039fee/64bae4c64dac89e5b5b4d001c2ca"
     }
],
...

我收到錯誤:“com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:預期BEGIN_OBJECT但在第1行第283行是BEGIN_ARRAY路徑$ .items.promoted [0] .images”
我正在尋求從json對象中提取數據的幫助。

編輯

我只需要刪除類'Images'並將'urls'從Json保存到Image []

預計BEGIN_OBJECT但在第1行第283行路徑為BEGIN_ARRAY $ .items.promoted [0] .images

問題是由於包裝類Images 從錯誤中,我認為你的對象是這樣的:

class Promoted {
  private Images images;
  ..
}

class Images {
  private Image[] images;
}

在您當前的表單中,您將能夠解析的json是:

...
,
"images": {
  "images": [
    {
      "url": "https://a.allegroimg.com/original/030516/a867b9dd4021b15678fc03a3981b"
    },
    {
      "url": "https://a.allegroimg.com/original/03da09/19740f7147ad929609cc2bcc499e"
    },
    {
      "url": "https://a.allegroimg.com/original/03198b/c024c7e448cab876bb49ad055567"
    },
    {
      "url": "https://a.allegroimg.com/original/039fee/64bae4c64dac89e5b5b4d001c2ca"
    }
  ]
}
...

相反,您可以直接在父對象中嵌入數組Image[] (沒有包裝類):

class Promoted {
  private Image[] images;
  ..
}

您可以使用DSM庫。 通過使用它,您可以在讀取JSON數據時提取JSON的一部分。

首先,您必須以yaml格式定義映射。

映射定義:

 result:
   type: array  # expect result as array
   path: /images
   fields:
     url:

使用DSM讀取數據。

DSM dsm=new DSMBuilder(new File("path/to/config.yaml")).create();
Object object=dsm.toObject(new File("path/to/data.json");
System.out.println(object);

這是輸出:

[{url=https://a.allegroimg.com/original/030516/a867b9dd4021b15678fc03a3981b}, {url=https://a.allegroimg.com/original/03da09/19740f7147ad929609cc2bcc499e}, {url=https://a.allegroimg.com/original/03198b/c024c7e448cab876bb49ad055567}, {url=https://a.allegroimg.com/original/039fee/64bae4c64dac89e5b5b4d001c2ca}]

如果您想將所有url字段作為列表獲取,則可以按如下方式為映射定義收費。

result:
   type: array
   path: /images/url

此映射的輸出是:

[https://a.allegroimg.com/original/030516/a867b9dd4021b15678fc03a3981b, https://a.allegroimg.com/original/03da09/19740f7147ad929609cc2bcc499e, https://a.allegroimg.com/original/03198b/c024c7e448cab876bb49ad055567, https://a.allegroimg.com/original/039fee/64bae4c64dac89e5b5b4d001c2ca]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM