簡體   English   中英

用gson解析json數組中的對象

[英]Parsing objects in a json array with gson

我有一個寧靜的端點,在端點http://127.0.0.1:4567/suppliers上執行GET時,它將提供以下JSON。

    {
    "status": "SUCCESS",
    "jsonapi": {
        "version": "1.0"
    },
    "data": {
        "id": 0,
        "type": "suppliers",
        "name": "Red Network Energy LTD"
    }
}

在httpPost請求中,我使用GSON將上述數據解析為SupplierResponseTest對象。 執行時:

SupplierResponseTest supplierResponse = gson.fromJson(supplierJsonResponse, SupplierResponseTest.class);

我得到錯誤:

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 57 path $.data

public SupplierResponseTest sendPostRequest(String supplierName){


    SupplierResponseTest supplierResponse;


    try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {


        //Create new object
        SupplierTest supplier = new SupplierTest(supplierName);

        //convert to Json
        Gson gson = new Gson();
        String requestBody = gson.toJson(supplier);


        //set entity

        HttpPost request = new HttpPost("http://127.0.0.1:4567/suppliers");
        StringEntity params = new StringEntity(requestBody);
        request.addHeader("content-type", "application/json");
        request.setEntity(params);
        HttpResponse result = httpClient.execute(request);
        String supplierJsonResponse = EntityUtils.toString(result.getEntity(), "UTF-8");


        supplierResponse = gson.fromJson(supplierJsonResponse, SupplierResponseTest.class);

        return supplierResponse;








    } catch (Exception e) {
        String status = "";
        System.out.println(e.getMessage());
        System.out.println(e.getClass());
        System.out.println(e.getStackTrace());

        status =  "NOK";

    }
    //return status; 
    return null;

}

對象如下。

package json.responses;
import com.google.gson.Gson;

public class SupplierResponseTest {

    private StatusResponseTest status;
    private ApiVersionResponseTest jsonapi;
    private String message;
    private ResponseDataTest data;


    public SupplierResponseTest(StatusResponseTest status, ApiVersionResponseTest jsonapi) {
        this.status = status;
        this.jsonapi = jsonapi;

    }
    public SupplierResponseTest(StatusResponseTest status, ApiVersionResponseTest jsonapi, String data, String message) {
        this.status = status;
        this.jsonapi = jsonapi;
        this.message = message;

        //data which needs to take into account the array of suppliers
        try{
            Gson gson = new Gson();
            this.data = gson.fromJson(data, ResponseDataTest.class);


        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }

    public StatusResponseTest getStatus() {
        return status;
    }
    public ApiVersionResponseTest getJsonapi() {
        return jsonapi;
    }
    public String getMessage() {
        return message;
    }

    //getData which needs to take into account the array of suppliers
    public ResponseDataTest getData() {
        return data;
    }

}

在您的課程中SupplierResponseTest.java

替換private ResponseDataTest data; 帶有private ResponseDataTest[] data;

並替換private StatusResponseTest status; 具有private String status;

如在您的JSON響應中,“數據”包含JSONArray

看這段代碼-

package com.stack.example;

import com.google.gson.Gson;

public class SupplierResponseTest {

    private String status;
    private ApiVersionResponseTest jsonapi;
    private String message;
    private ResponseDataTest[] data;


    public SupplierResponseTest(String status, ApiVersionResponseTest jsonapi) {
        this.status = status;
        this.jsonapi = jsonapi;

    }
    public SupplierResponseTest(String status, ApiVersionResponseTest jsonapi, String data, String message) {
        this.status = status;
        this.jsonapi = jsonapi;
        this.message = message;

        //data which needs to take into account the array of suppliers
        try{
            Gson gson = new Gson();
            this.data = gson.fromJson(data, ResponseDataTest[].class);


        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }

    public String getStatus() {
        return status;
    }
    public ApiVersionResponseTest getJsonapi() {
        return jsonapi;
    }
    public String getMessage() {
        return message;
    }

    //getData which needs to take into account the array of suppliers
    public ResponseDataTest[] getData() {
        return data;
    }

    @Override
    public String toString() {
        return "SupplierResponseTest [status=" + status + ", jsonapi="
            + jsonapi + ", message=" + message + ", data=" + data + "]";
    }
}

public class ApiVersionResponseTest {

    private String version;

    public ApiVersionResponseTest() {
        super();
        // TODO Auto-generated constructor stub
    }

    public ApiVersionResponseTest(String version) {
        super();
        this.version = version;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }   
}

package com.stack.example;

public class ResponseDataTest {

    private int id;
    private String type;
    private String name;
    public ResponseDataTest() {
        super();
        // TODO Auto-generated constructor stub
    }
    public ResponseDataTest(int id, String type, String name) {
        super();
        this.id = id;
        this.type = type;
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

package com.stack.example;

import com.google.gson.Gson;

public class Stack {


    public static void main(String[] args) {

        String jsonResponse = "{\"status\": \"SUCCESS\",\"jsonapi\": {\"version\": \"1.0\"},\"data\": ["
                + "{\"id\": 70,\"type\": \"suppliers\",\"name\": \"Blue Network Energy LTD\"},"
                + "{\"id\": 71,\"type\": \"suppliers\",\"name\": \"Red Network Energy LTD\"},"
                + "{\"id\": 72,\"type\": \"suppliers\",\"name\": \"Orange Network Energy LTD\"},"
                + "{\"id\": 73,\"type\": \"suppliers\",\"name\": \"Green Network Energy LTD\"}]}";

        Gson gson = new Gson();

        //Parse json into a SupplierResponseTest object.
        SupplierResponseTest supplierResponse = gson.fromJson(jsonResponse, SupplierResponseTest.class);

        System.out.println(supplierResponse);

    }

}

希望這對您有用。

暫無
暫無

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

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