簡體   English   中英

將JSON字符串轉換為JSON對象

[英]Convert JSON string to json objects

我有一個返回的json字符串:

[{"TRAIN_JOURNEY_STAFF[],"ID":15,"EMAIL_ADDRESS":"jk@connectedrail.com","PASSWORD":"test","FIRST_NAME":"Joe","LAST_NAME":"Kevin","DATE_OF_BIRTH":"1996-04-20T00:00:00","GENDER":"Male","STAFF_ROLE":"Conductor","PHOTO":null},{new record..}]

這里有幾條記錄,我找不到將這個json字符串轉換為單個對象的方法。 我正在使用以下內容讀取數據:

StringBuffer response;
    try (BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()))) {
        String inputLine;
        response = new StringBuffer();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
    }
    System.out.print(response.toString());
}

我已經嘗試過簡單的json庫,但是解析器將字符串混合在一起,這並不理想,因為我需要將數據逐行輸出到jtables。

任何幫助,將不勝感激。

使用GSON在下面解決了該問題。 非常感謝大家!

    JsonElement jelement = new JsonParser().parse(response.toString());
    JsonArray jarray = jelement.getAsJsonArray();

    JsonObject jobject = jarray.get(0).getAsJsonObject();

    System.out.println(jobject.get("FIRST_NAME"));

您可以使用如下形式:

public class ObjectSerializer {

private static ObjectMapper objectMapper;

@Autowired
public ObjectSerializer(ObjectMapper objectMapper) {
    ObjectSerializer.objectMapper = objectMapper;
}

public static <T> T getObject(Object obj, Class<T> class1) {
    String jsonObj = "";
    T userDto = null;
    try {
        jsonObj = objectMapper.writeValueAsString(obj);
        userDto = (T) objectMapper.readValue(jsonObj, class1);
        System.out.println(jsonObj);
    } catch (JsonProcessingException jpe) {
    } catch (IOException e) {
        e.printStackTrace();
    }
    return userDto;
}

將您的JSON對象傳遞給帶有類名的此方法alogn,它將把JSON數據設置為相應的類。

注意:類必須具有與要與其映射的JSON中相同的變量。

你基本上是這樣的:

[
  {
  "TRAIN_JOURNEY_STAFF":[
  ],
  "ID":15,
  "EMAIL_ADDRESS":"jk@connectedrail.com",
  "PASSWORD":"test",
  "FIRST_NAME":"Joe",
  "LAST_NAME":"Kevin",
  "DATE_OF_BIRTH":"1996-04-20T00:00:00",
  "GENDER":"Male",
  "STAFF_ROLE":"Conductor",
  "PHOTO":null
  },
  {

  }
]

您可以使用JSON構造函數將此數組序列化為JSONObjects數組。 嘗試在Java中尋找JSONObjectJSONArray類。 構造函數基本上采用字符串化的JSON(您已經擁有)。

使用org.json庫:

JSONObject jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");

看到這個

您可以使用Jackson將JSON轉換為對象,包括依賴項:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.6.3</version>
</dependency>

然后創建一個POJO類以存儲JSON.pojo類應反映json字符串結構,並應具有適當的字段以映射值(此處示例代碼Staff.class是pojo類)。然后,使用ObjectMapper類可以如下將JSON字符串轉換為java對象:

StringBuffer response;
    try (BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()))) {
        String inputLine;
        response = new StringBuffer();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
    }
    System.out.print(response.toString());

  ObjectMapper mapper = new ObjectMapper();

  //JSON from file to Object
  Staff obj = mapper.readValue(new File("c:\\file.json"), Staff.class);

  //JSON from String to Object 
  Staff obj = mapper.readValue(response.toString(), Staff.class);

讀取JSON字符串並將其轉換為對象的另一種簡單方法是:

JSON字符串:

{
     "lastName":"Smith",
    "address":{
        "streetAddress":"21 2nd Street",
         "city":"New York",
         "state":"NY",
         "postalCode":10021
    },
     "age":25,
     "phoneNumbers":[
            {
            "type":"home", "number":"212 555-1234"
            },
         {
            "type":"fax", "number":"212 555-1234"
         }
     ],
     "firstName":"John"
}

public class JSONReadExample  
{ 
    public static void main(String[] args) throws Exception  
    { 
        // parsing file "JSONExample.json" 
        Object obj = new JSONParser().parse(new FileReader("JSONExample.json")); 

        // typecasting obj to JSONObject 
        JSONObject jo = (JSONObject) obj; 

        // getting firstName and lastName 
        String firstName = (String) jo.get("firstName"); 
        String lastName = (String) jo.get("lastName"); 

        System.out.println(firstName); 
        System.out.println(lastName); 

        // getting age 
        long age = (long) jo.get("age"); 
        System.out.println(age); 

        // getting address 
        Map address = ((Map)jo.get("address")); 

        // iterating address Map 
        Iterator<Map.Entry> itr1 = address.entrySet().iterator(); 
        while (itr1.hasNext()) { 
            Map.Entry pair = itr1.next(); 
            System.out.println(pair.getKey() + " : " + pair.getValue()); 
        } 

        // getting phoneNumbers 
        JSONArray ja = (JSONArray) jo.get("phoneNumbers"); 

        // iterating phoneNumbers 
        Iterator itr2 = ja.iterator(); 

        while (itr2.hasNext())  
        { 
            itr1 = ((Map) itr2.next()).entrySet().iterator(); 
            while (itr1.hasNext()) { 
                Map.Entry pair = itr1.next(); 
                System.out.println(pair.getKey() + " : " + pair.getValue()); 
            } 
        } 
    } 
} 

以供參考:
https://www.geeksforgeeks.org/parse-json-java/
https://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/

暫無
暫無

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

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