我有一个包含名称和属性的JSON对象。我需要将选定的值存储到地图/自定义对象。
下面的是我的JSON对象,我需要在其中考虑
final
的{{1}}和official
以及{{1}的Prm
和Total 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做到这一点?我曾考虑过使用地图,但是它没有按预期工作。 任何线索或建议都会有所帮助。预先感谢。
答案 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中。