簡體   English   中英

如何在java中動態創建JSON?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM