简体   繁体   English

Java - 从 JSON 中提取数组字符串并转换为 JSON 格式

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

I have a JSON String as below:我有一个 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\"}] }";

Now I want to extract the Array from it and need to use it as a separate pojo class so that I can iterate over each value..现在我想从中提取 Array 并需要将它用作单独的 pojo 类,以便我可以迭代每个值..

Now the problem is, when I try to convert the complete String to Map and get the Array value from the map.. It transforms its format to MAp format like:现在的问题是,当我尝试将完整的 String 转换为 Map 并从地图中获取 Array 值时..它将其格式转换为 MAp 格式,例如:

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

However json string should be {"FORM_RECEIVING_DATE": "12:00:00", etc..}但是 json 字符串应该是 {"FORM_RECEIVING_DATE": "12:00:00", etc..}

due to the MAp format its now allowing me to parse it using my POJO Class..由于 MAp 格式,它现在允许我使用我的 POJO 类解析它。

Please help to convert it to my JSONFormat ...请帮助将其转换为我的 JSONFormat ...

**NOTE: Please note that I can only use Jackson **. **注意:请注意,我只能使用 Jackson **。

CLASS A 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());
            }

CLASS B 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") returns a List object, and the toString() method of List does not generate JSON text. map.get("ROU_DATA")返回一个List对象,并且toString()的方法List不产生JSON文本。

You don't need to convert back to a JSON text just to get the ROU[] created, just call convertValue(...) .您不需要为了创建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());

Output输出

Redemption of Unit
sALE of Unit

class A 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;
}

} }

class B 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 to Object 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