Cách tạo JSONArray chính xác trong Java bằng JSONObject


129

Làm cách nào tôi có thể tạo Đối tượng JSON như sau, trong Java bằng JSONObject?

{
    "employees": [
        {"firstName": "John", "lastName": "Doe"}, 
        {"firstName": "Anna", "lastName": "Smith"}, 
        {"firstName": "Peter", "lastName": "Jones"}
    ],
    "manager": [
        {"firstName": "John", "lastName": "Doe"}, 
        {"firstName": "Anna", "lastName": "Smith"}, 
        {"firstName": "Peter", "lastName": "Jones"}
    ]
}

Tôi đã tìm thấy rất nhiều ví dụ, nhưng không phải là chuỗi JSONArray chính xác của tôi.

Câu trả lời:


247

Đây là một số mã sử dụng java 6 để giúp bạn bắt đầu:

JSONObject jo = new JSONObject();
jo.put("firstName", "John");
jo.put("lastName", "Doe");

JSONArray ja = new JSONArray();
ja.put(jo);

JSONObject mainObj = new JSONObject();
mainObj.put("employees", ja);

Chỉnh sửa: Vì đã có rất nhiều nhầm lẫn về putvs addở đây, tôi sẽ cố gắng giải thích sự khác biệt. Trong java 6 org.json.JSONArray chứa putphương thức và trong java 7 javax.json chứaadd phương thức.

Một ví dụ về điều này bằng cách sử dụng mẫu trình xây dựng trong java 7 trông giống như thế này:

JsonObject jo = Json.createObjectBuilder()
  .add("employees", Json.createArrayBuilder()
    .add(Json.createObjectBuilder()
      .add("firstName", "John")
      .add("lastName", "Doe")))
  .build();

3
cũng có thể gói vào thử / bắt? (hoặc phương pháp phải có tuyên bố ném)
Lukas1

8
JSONArray không có phương thức put.
Jim

2
sử dụng thêm thay vì đặt
CleanX

1
@PT_C yep JsonObject jo = Json.createObjectBuilder (); jo.add ("FirstName", "John"); jo.add ("họ", "Doe"); jo.build ();
Grammin

1
@ArnoldBrown Để thêm một mảng vào mainObj, nó phải có một khóa.
Grammin

15

Tôi cho rằng bạn đang nhận JSON này từ máy chủ hoặc tệp và bạn muốn tạo một đối tượng JSONArray từ đó.

String strJSON = ""; // your string goes here
JSONArray jArray = (JSONArray) new JSONTokener(strJSON).nextValue();
// once you get the array, you may check items like
JSONOBject jObject = jArray.getJSONObject(0);

Hi vọng điêu nay co ich :)


11

Phương pháp tái sử dụng nhỏ có thể được viết để tạo đối tượng json người để tránh mã trùng lặp

JSONObject  getPerson(String firstName, String lastName){
   JSONObject person = new JSONObject();
   person .put("firstName", firstName);
   person .put("lastName", lastName);
   return person ;
} 

public JSONObject getJsonResponse(){

    JSONArray employees = new JSONArray();
    employees.put(getPerson("John","Doe"));
    employees.put(getPerson("Anna","Smith"));
    employees.put(getPerson("Peter","Jones"));

    JSONArray managers = new JSONArray();
    managers.put(getPerson("John","Doe"));
    managers.put(getPerson("Anna","Smith"));
    managers.put(getPerson("Peter","Jones"));

    JSONObject response= new JSONObject();
    response.put("employees", employees );
    response.put("manager", managers );
    return response;
  }

1

Hãy thử điều này ... hy vọng nó sẽ giúp

JSONObject jsonObj1=null;
JSONObject jsonObj2=null;
JSONArray array=new JSONArray();
JSONArray array2=new JSONArray();

jsonObj1=new JSONObject();
jsonObj2=new JSONObject();


array.put(new JSONObject().put("firstName", "John").put("lastName","Doe"))
.put(new JSONObject().put("firstName", "Anna").put("v", "Smith"))
.put(new JSONObject().put("firstName", "Peter").put("v", "Jones"));

array2.put(new JSONObject().put("firstName", "John").put("lastName","Doe"))
.put(new JSONObject().put("firstName", "Anna").put("v", "Smith"))
.put(new JSONObject().put("firstName", "Peter").put("v", "Jones"));

jsonObj1.put("employees", array);
jsonObj1.put("manager", array2);

Response response = null;
response = Response.status(Status.OK).entity(jsonObj1.toString()).build();
return response;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.