读取 JSON 请求并映射到 JAVA POJO
Read JSON Request and Map to JAVA POJO
我的要求:
我在 table 列中有一个 JSON 请求,如下所示。
{
"customerData": [{ "primaryData":[ {
"HNo": "8-10-2",
"APTNM": "SRSENCLAVE",
"STRT": "MGCLNY"
}],
"officeData":{
"ADDR": "1/7-25",
"STRT": "FINDIST",
"LM": "JBE"
},
"ContactData": {
"PHNO":"XXXXXXXXX",
"ZIP":"XXXXXX",
"MAILCD": "XXXX"},
}
]}
我需要从数据库读取它并将 JSON 值映射到三个不同的 class properties.i.e。 PrimaryData.java。 OfficeData.java、ContactData.java。
我能够成功地从 DB 读取请求,但对如何将值映射到我的三个 POJO classes 中的属性感到震惊。我尝试使用更快的 xml、google Gson、org.json,但我无法很好地使用它。有人可以给我一个想法或部分代码片段吗?
我是如何尝试实现上述目标的(完全不确定这种方法是否正确)
List<Map<String, PrimaryData>> cxData = new ArrayList<Map<String,PrimaryData>>();
JSONObject jSONObject = new JSONObject(query.getResultList().get(0).toString());
JSONArray jsonArray = jSONObject.getJSONArray("customerData");
int length = jsonArray.length();
for (int i=0; i<length; i++)
{
// FOR EACH ENTRY
JSONObject OneEntry = jsonArray.getJSONObject(i);
int OneEntrySize = OneEntry.length();
JSONArray EntKey = OneEntry.names();
Map<String, PrimaryData> map = new HashMap<String, PrimaryData>();
for (int j=0; j<OneEntrySize;j++)
{ // FOR EACH ITEM IN AN ENTRY
String key = EntKey.getString(j);
PrimaryData val = (PrimaryData)OneEntry.opt(key);;--unable to cast (can not cast JsonArray to PrimaryData)
map.put(key, val);
}
cxData.add(map);
}
和GSON
public class Data {
@SerializedName("customerData") @Expose private List<CustomerData> customerData = null;
}
public class CustomerData {
@SerializedName("primaryData") @Expose private List<PrimaryData> primaryData = null;
@SerializedName("officeData") @Expose private OfficeData officeData;
@SerializedName("ContactData") @Expose private ContactData contactData;
}
public class PrimaryData {
@SerializedName("HNo") @Expose private String hNo;
@SerializedName("APTNM") @Expose private String aPTNM;
@SerializedName("STRT") @Expose private String sTRT;
}
public class OfficeData {
@SerializedName("ADDR") @Expose private String aDDR;
@SerializedName("STRT") @Expose private String sTRT;
@SerializedName("LM") @Expose private String lM;
}
public class ContactData {
@SerializedName("PHNO") @Expose private String pHNO;
@SerializedName("ZIP") @Expose private String zIP;
@SerializedName("MAILCD") @Expose private String mAILCD;
}
Gson gson = new Gson();
Data data = gson.fromJson(dataJSON, Data.class);
我的要求: 我在 table 列中有一个 JSON 请求,如下所示。
{
"customerData": [{ "primaryData":[ {
"HNo": "8-10-2",
"APTNM": "SRSENCLAVE",
"STRT": "MGCLNY"
}],
"officeData":{
"ADDR": "1/7-25",
"STRT": "FINDIST",
"LM": "JBE"
},
"ContactData": {
"PHNO":"XXXXXXXXX",
"ZIP":"XXXXXX",
"MAILCD": "XXXX"},
}
]}
我需要从数据库读取它并将 JSON 值映射到三个不同的 class properties.i.e。 PrimaryData.java。 OfficeData.java、ContactData.java。 我能够成功地从 DB 读取请求,但对如何将值映射到我的三个 POJO classes 中的属性感到震惊。我尝试使用更快的 xml、google Gson、org.json,但我无法很好地使用它。有人可以给我一个想法或部分代码片段吗? 我是如何尝试实现上述目标的(完全不确定这种方法是否正确)
List<Map<String, PrimaryData>> cxData = new ArrayList<Map<String,PrimaryData>>();
JSONObject jSONObject = new JSONObject(query.getResultList().get(0).toString());
JSONArray jsonArray = jSONObject.getJSONArray("customerData");
int length = jsonArray.length();
for (int i=0; i<length; i++)
{
// FOR EACH ENTRY
JSONObject OneEntry = jsonArray.getJSONObject(i);
int OneEntrySize = OneEntry.length();
JSONArray EntKey = OneEntry.names();
Map<String, PrimaryData> map = new HashMap<String, PrimaryData>();
for (int j=0; j<OneEntrySize;j++)
{ // FOR EACH ITEM IN AN ENTRY
String key = EntKey.getString(j);
PrimaryData val = (PrimaryData)OneEntry.opt(key);;--unable to cast (can not cast JsonArray to PrimaryData)
map.put(key, val);
}
cxData.add(map);
}
和GSON
public class Data {
@SerializedName("customerData") @Expose private List<CustomerData> customerData = null;
}
public class CustomerData {
@SerializedName("primaryData") @Expose private List<PrimaryData> primaryData = null;
@SerializedName("officeData") @Expose private OfficeData officeData;
@SerializedName("ContactData") @Expose private ContactData contactData;
}
public class PrimaryData {
@SerializedName("HNo") @Expose private String hNo;
@SerializedName("APTNM") @Expose private String aPTNM;
@SerializedName("STRT") @Expose private String sTRT;
}
public class OfficeData {
@SerializedName("ADDR") @Expose private String aDDR;
@SerializedName("STRT") @Expose private String sTRT;
@SerializedName("LM") @Expose private String lM;
}
public class ContactData {
@SerializedName("PHNO") @Expose private String pHNO;
@SerializedName("ZIP") @Expose private String zIP;
@SerializedName("MAILCD") @Expose private String mAILCD;
}
Gson gson = new Gson();
Data data = gson.fromJson(dataJSON, Data.class);