簡體   English   中英

Java - 從 JSON 中提取數組字符串並轉換為 JSON 格式

[英]Java - Extract array String from JSON and convert to JSON format

我有一個 JSON 字符串,如下所示:

"{ \"password\":\"des123\",\"ROU_DATA\":[{\"FORM_RECEIVING_TIME\":\"12:00:00\",\"REMARKS\":\"Redemption of Unit\"}, {\"FORM_RECEIVING_TIME\":\"13:00:00\",\"REMARKS\":\"sALE of Unit\"}] }";

現在我想從中提取 Array 並需要將它用作單獨的 pojo 類,以便我可以迭代每個值..

現在的問題是,當我嘗試將完整的 String 轉換為 Map 並從地圖中獲取 Array 值時..它將其格式轉換為 MAp 格式,例如:

{FORM_RECEIVING_DATE = 12:00:00 等..}

但是 json 字符串應該是 {"FORM_RECEIVING_DATE": "12:00:00", etc..}

由於 MAp 格式,它現在允許我使用我的 POJO 類解析它。

請幫助將其轉換為我的 JSONFormat ...

**注意:請注意,我只能使用 Jackson **。

A級

            ObjectMapper mapper2 = new ObjectMapper();

            Map<String, Object> map;

            map = mapper2.readValue(json, new TypeReference<Map<String, Object>>(){});

            System.out.println("map: " + map.get("ROU_DATA") );


            String array = map.get("ROU_DATA").toString();

            String json2 = new ObjectMapper().writeValueAsString(array.replace("[", "").replace("]", ""));
            String json3 = new ObjectMapper().writeValueAsString(json2);
            System.out.println("json2>>" + json2);
            System.out.println("json2>>" + json3);
            mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
            // 1. convert JSON array to Array objects


            ROU[] pp1 = mapper.readValue("{" + array.replace("=", ":") + "}", ROU[].class);


            for (ROU person : pp1) {
                System.out.println(person.getRemarks());
            }

B級

import com.fasterxml.jackson.annotation.JsonProperty;

public class ROU {

    @JsonProperty("FORM_RECEIVING_TIME")
    private String formdate;

    @JsonProperty("REMARKS")
    private String remarks;

    public String getFormdate() {
        return formdate;
    }

    public void setFormdate(String formdate) {
        this.formdate = formdate;
    }

    public String getRemarks() {
        return remarks;
    }

    public void setRemarks(String remarks) {
        this.remarks = remarks;
    }



}

map.get("ROU_DATA")返回一個List對象,並且toString()的方法List不產生JSON文本。

您不需要為了創建ROU[]而將其轉換回 JSON 文本,只需調用convertValue(...)

String input = "{ \"password\":\"des123\",\"ROU_DATA\":[{\"FORM_RECEIVING_TIME\":\"12:00:00\",\"REMARKS\":\"Redemption of Unit\"}, {\"FORM_RECEIVING_TIME\":\"13:00:00\",\"REMARKS\":\"sALE of Unit\"}] }";

ObjectMapper mapper2 = new ObjectMapper();
Map<?, ?> json = mapper2.readValue(input, Map.class);
ROU[] pp1 = mapper2.convertValue(json.get("ROU_DATA"), ROU[].class);

for (ROU person : pp1)
    System.out.println(person.getRemarks());

輸出

Redemption of Unit
sALE of Unit

A級

public class ROU {

@JsonProperty("FORM_RECEIVING_TIME")
private String formdate;

@JsonProperty("REMARKS")
private String remarks;

public String getFormdate() {
    return formdate;
}

public void setFormdate(String formdate) {
    this.formdate = formdate;
}

public String getRemarks() {
    return remarks;
}

public void setRemarks(String remarks) {
    this.remarks = remarks;
}

}

B級

public class ObjOuter {

 private String password;

 @JsonProperty("ROU_DATA")
 private List<ROU> rous;

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public List<ROU> getRous() {
    return rous;
}

public void setRous(List<ROU> rous) {
    this.rous = rous;
}

}

json轉對象

    ObjectMapper mapper = new ObjectMapper();
    try {
        ObjOuter outer = mapper.readValue(str, ObjOuter.class);
        for (ROU rou : outer.getRous()) {
            System.out.println(rou.getFormdate());
            System.out.println(rou.getRemarks());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

暫無
暫無

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

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