读取Json对象并在地图中存储所需的值

时间:2019-03-25 12:22:09

标签: java json spring-boot

我有一个包含名称和属性的JSON对象。我需要将选定的值存储到地图/自定义对象。

  下面的

是我的JSON对象,我需要在其中考虑final的{​​{1}}和official以及{{1}的PrmTotal Load Amt的值}。   这4个值需要将其添加到自定义对象中,并用于进一步的操作。

Com Load Amt
  

我需要将load { "qObject": { "element": [ { "name": "PO", "attribute": [ { "name": "PO_DT", "value": "2017-01-25" }, { "name": "POEN_DT", "value": "2017-02-24" } ] }, { "name": "DETAILS", "attribute": [ { "name": "ZZ_CD", "value": "COM" }, { "name": "ZZBO_CD", "value": "5" }, { "name": "ZZEX_CD", "value": "PRI" }, { "name": "ZZRE_CD", "value": "WST" } ] }, { "name": "Prm", "attribute": [ { "name": "Theoritical", "value": "0.0000" }, { "name": "Final", "value": "741.7513" }, { "name": "Official", "value": "1009.9481" } ] }, { "name": "Load", "attribute": [ { "name": "TotalLoadPercentage", "value": "27.6900" }, { "name": "TotalLoadAmt", "value": "268.1968" }, { "name": "ComLoadPercentage", "value": "5" }, { "name": "ComLoadAmt", "value": "50.4974" } ] } ] } } "name": "Total Load Amt"name": "Com Load Amt的值存储到“自定义对象”下方

"name": "Final"

如何用Java做到这一点?我曾考虑过使用地图,但是它没有按预期工作。 任何线索或建议都会有所帮助。预先感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用Gson类来解析json。


Gson gson = new Gson();
pcResponseType = gson.fromJson(jsonString,PcResponseType.class);

接下来,您将能够获取要检索并在地图中设置的任何字段。

希望我能理解您的问题并适当回答。希望对您有所帮助。

答案 1 :(得分:1)

您可以使用以下方式创建自定义类:

@Getter
@Setter
public class CustomObject {
    private  Map<String, List<Element>> qObject;
}
@Getter
@Setter
public class Element {

    private String name;
    private List<Attribute> attribute;
}

@Getter
@Setter
public class Attribute {

    private String name;
    private String value;
}

现在您可以将json反序列化为:

 Gson gson = new Gson();
 CustomObject jsonObject = gson.fromJson(json,CustomObject.class);
 System.out.println(jsonObject);

答案 2 :(得分:1)

您需要使用当前字段创建类以映射json字符串。 Gson使用变量类型和名称进行解析。 setter和getter是可选的,您只能在正确的类中创建它们。如果您不想全部阅读=)gist with all code


使用字段Map qObject创建主要json元素的类以映射json数组:

public static class CustomJsonObject {
    private Map<String, List<Element>> qObject;

    // getters and setters
}

然后,您需要创建类,以使用字段名称和列表属性映射“ element” json数组中的任何元素:

public static class Element {
    private String name;
    private List<Attributes> attribute;

    // getters and setters
}

然后,您需要创建一个类,用于使用字符串名称和字符串值字段映射“属性” json数组中的任何元素:

public static class Attributes {
    private String name;
    private String value;

    // getters and setters
}

创建此类后,您可以编写以下内容:

CustomJsonObject customJsonObject = new Gson().fromJson(jsonStr, CustomJsonObject.class);

并获取带有所有json信息的类。下一步,找到当前数据并将其放入您的班级。您可以为此使用stream-api,也可以使用foreach等等。我将完整的代码放在gist中。