[英]How to create JSON dynamically in java?
我有一個帶有 getter 和 setter 的 CustomerEntiy,示例 customerEntity 是
customerEntity =
{
"customerNumber": "1234",
"firstName": "Test",
"email": "test@gmail.com",
"id": "1",
"middleName": "doe",
"phone": "11111"
}
我有 JsonProperty 的 java 類屬性,帶有 getter 和 Setter,如下所示
Attributes =
{
"name": "string"
"value": "string"
}
我有一個列表,其中包含來自 CustomerEntiy 的隨機元素,例如:
List<String> stringlist = { "firstName" , "phone"}
我創建了一個類型屬性列表
List<Attributes> Attributeslist = new ArrayList<>();
我想創建 stringlist 中所有元素的 Attributelist 例如這里是:
Attributeslist =[
{
"name": "firstName"
"value": "Test"
},
{
"name": "phone"
"value": "11111"
}
]
為此,我編寫了如下代碼,但要在previewattributes.setValue();
傳遞什么previewattributes.setValue();
因為該值將取決於下面 for 循環中的mystring
是什么。 在這個例子中,它是previewattributes.setValue(customerEntity.getFirstName());
和previewattributes.setValue(customerEntity.getPhone());
對於不同的迭代,但我如何編碼?
for (String mystring : stringlist) {
Attributes previewattributes;
previewattributes = new Attributes();
previewattributes.setName(mystring);
previewattributes.setValue(value here would be of customerentity);
Attributeslist.add(previewattributes);
}
客戶實體:
@Entity
@Table(name = "Customer_tbl")
public class CustomerEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long rowId;
@Column(name = "customer_number")
private String customerNumber;
public String getCustomerNumber() {
return customerNumber;
}
public void setCustomerNumber(String customerNumber) {
this.customerNumber = customerNumber;
}
}
您可以在 Java 中使用反射。 更簡單的方法是將 customerEntity 存儲在 HashMap 中並從中獲取。
HashMap<String,String> m=new HashMap<>();
m.put("customerNumber", customerEntity.getCustomerNumber());
m.put("firstName", customerEntity.getFirstName());
m.put("email", customerEntity.getEmail());
m.put("id", customerEntity.getId());
m.put("middleName", customerEntity.getMiddleName());
m.put("phone", customerEntity.getPhone());
在 for 循環內:
previewattributes.setValue(m.get(attribute));
如果我理解正確,你有一個 Customer Json 數組,你想在其中分離一些屬性,請檢查下面的代碼
public static void main(String[] args) {
String jsonArray = "[\r\n" +
" {\r\n" +
" \"customerNumber\":\"1234\",\r\n" +
" \"firstName\":\"Test\",\r\n" +
" \"email\":\"test@gmail.com\",\r\n" +
" \"id\":\"1\",\r\n" +
" \"middleName\":\"doe\",\r\n" +
" \"phone\":\"11111\"\r\n" +
" },\r\n" +
" {\r\n" +
" \"customerNumber\":\"1235\",\r\n" +
" \"firstName\":\"Test2\",\r\n" +
" \"email\":\"test2@gmail.com\",\r\n" +
" \"id\":\"2\",\r\n" +
" \"middleName\":\"doe2\",\r\n" +
" \"phone\":\"2222\"\r\n" +
" }\r\n" +
"]";
List<String> requiredKeys = Arrays.asList("firstName" , "phone");
JSONArray array = new JSONArray(jsonArray);
Iterator iterator = array.iterator();
JSONArray outputArray = new JSONArray();
while(iterator.hasNext()) {
JSONObject jsonObject = (JSONObject)iterator.next();
Iterator<String> keys = jsonObject.keys();
while(keys.hasNext()) {
String key = keys.next();
if(requiredKeys.contains(key)) {
JSONObject attribute = new JSONObject();
attribute.put("name", key);
attribute.put("value", jsonObject.get(key));
outputArray.put(attribute);
}
}
}
System.out.println(outputArray);
}
}
輸出
[
{
"name":"firstName",
"value":"Test"
},
{
"name":"phone",
"value":"11111"
},
{
"name":"firstName",
"value":"Test2"
},
{
"name":"phone",
"value":"2222"
}
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.