Làm thế nào để kiểm tra nếu một khóa json tồn tại?


165

Vì vậy, tôi nhận được một số giá trị JSON từ máy chủ nhưng tôi không biết liệu sẽ có một trường cụ thể hay không.

Vì vậy, như:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited"
}

Và đôi khi, sẽ có một trường thêm như:

{ "regatta_name":"ProbaRegatta",
  "country":"Congo",
  "status":"invited",
  "club":"somevalue"
}

Tôi muốn kiểm tra xem trường có tên "club" có tồn tại không để phân tích cú pháp tôi sẽ không nhận được org.json.JSONException: Không có giá trị cho câu lạc bộ


if (jsonObject.getString ("club")! = null) {// lấy vale ở đây}
Phần mềm Sainath

3
Không, tại trường hợp ngoại lệ xử lý mã dừng lại và các hành động phân tích cú pháp tiếp theo sẽ không chạy.
Adam Varhegyi

1
@SoftwareSainath Thats không hoạt động, vẫn có ngoại lệ.
Adam Varhegyi

Chuỗi clubvalue = ""; thử (clubvalue = jsonobject.getString ("club");} Catch (Exception e) {}
Phần mềm Sainath

Câu trả lời:


266

Lớp JSONObject có một phương thức có tên là "has":

http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)

Trả về true nếu đối tượng này có ánh xạ cho tên. Ánh xạ có thể là NULL.


28
vì "chứa" quá nhiều? :)
Omri374

Điều gì nếu khóa là từ Integerloại?
Eido95

2
@ Eido95 có Integermột phím như âm thanh thực hành xấu. JSON phải có khóa String và giá trị của bất cứ thứ gì bạn cần.
Nico

@ Eido95, tôi tin rằng đối với một số nguyên luôn có một giá trị, mỗi khi bạn khai báo một số nguyên, bạn phải khởi tạo nó bằng một giá trị.
mut tony

154

Bạn có thể kiểm tra theo cách này trong đó 'ĐÃ' - Trả về true nếu đối tượng này có ánh xạ cho tên. Ánh xạ có thể là NULL.

if (json.has("status")) {
   String status = json.getString("status"));
}

if (json.has("club")) {
   String club = json.getString("club"));
}

Bạn cũng có thể kiểm tra bằng cách sử dụng 'isNull' - Trả về true nếu đối tượng này không có ánh xạ cho tên hoặc nếu nó có ánh xạ có giá trị là NULL.

if (!json.isNull("club"))
    String club = json.getString("club"));

1
bạn đang sử dụng json lib nào, bạn có thể cung cấp một ví dụ đơn giản cho json-smart hoặc json-Simple
samuel owino

@samuelowino json là biến số có chứa đối tượng của bạn
Fernando Torres

17

bạn có thể JSONObject#has, cung cấp keyđầu vào là và kiểm tra xem phương thức trả về truehay false. Bạn cũng có thể

sử dụng optStringthay vì getString:

Trả về giá trị được ánh xạ theo tên nếu nó tồn tại, ép buộc nếu cần. Trả về chuỗi trống nếu không có ánh xạ như vậy tồn tại


1
Mặc dù phương pháp này có thể được sử dụng cho người khác, nhưng điều này không trả về nếu giá trị tồn tại. Nếu getStringđã trả về một chuỗi rỗng, optStringcũng sẽ trả về một chuỗi trống. Giả định sau đó sẽ khiến bạn tin rằng tài sản không có sẵn trong tình huống của OP.
Halfpastfour.am

@Blackbelt bạn có nguồn nào cho việc này không?
tsuz

10

Bạn có thể dùng has

public boolean has(String key)

Xác định xem JSONObject có chứa một khóa cụ thể không .

Thí dụ

JSONObject JsonObj = new JSONObject(Your_API_STRING); //JSONObject is an unordered collection of name/value pairs

if (JsonObj.has("address")) { 
    //Checking address Key Present or not
    String get_address = JsonObj .getString("address"); // Present Key
}
else {
    //Do Your Staff
}

10

ngay trước khi đọc khóa kiểm tra nó như trước khi đọc

JSONObject json_obj=new JSONObject(yourjsonstr);
if(!json_obj.isNull("club"))
{
  //it's contain value to be read operation
}
else
{
  //it's not contain key club or isnull so do this operation here
}

Định nghĩa hàm isNull

Returns true if this object has no mapping for name or
if it has a mapping whose value is NULL. 

tài liệu chính thức dưới đây liên kết cho isNullchức năng

http://developer.android.com/reference/org/json/JSONObject.html#isNull(java.lang.String)


2

Thử cái này

if(!jsonObj.isNull("club")){
    jsonObj.getString("club");
}

2
isNullthực sự là để kiểm tra nếu ánh xạ là null, không phải để kiểm tra tính khả dụng của thành viên json.
Reza_Rg

2

Một cách tốt hơn, thay vì sử dụng một điều kiện như:

if (json.has("club")) {
    String club = json.getString("club"));
 }

chỉ đơn giản là sử dụng phương thức optString () hiện có, như thế này:

String club = json.optString("club);

phương thức optString ("key") sẽ trả về một Chuỗi rỗng nếu khóa không tồn tại và do đó, sẽ không ném cho bạn một ngoại lệ.


2

Json có một phương thức gọi là containsKey().

Bạn có thể sử dụng nó để kiểm tra nếu một khóa nhất định được chứa trong bộ Json.

File jsonInputFile = new File("jsonFile.json"); 
InputStream is = new FileInputStream(jsonInputFile);
JsonReader reader = Json.createReader(is);
JsonObject frameObj = reader.readObject();
reader.close();

if frameObj.containsKey("person") {
      //Do stuff
}

1
I used hasOwnProperty('club')

var myobj = { "regatta_name":"ProbaRegatta",
    "country":"Congo",
    "status":"invited"
 };

 if ( myobj.hasOwnProperty("club"))
     // do something with club (will be false with above data)
     var data = myobj.club;
 if ( myobj.hasOwnProperty("status"))
     // do something with the status field. (will be true with above ..)
     var data = myobj.status;

hoạt động trong tất cả các trình duyệt hiện tại.


1

Thử cái này:

let json=yourJson

if(json.hasOwnProperty(yourKey)){
    value=json[yourKey]
}

1

Bạn có thể thử điều này để kiểm tra xem có tồn tại khóa hay không:

JSONObject object = new JSONObject(jsonfile);
if (object.containskey("key")) {
  object.get("key");
  //etc. etc.
}

0

Tôi chỉ cần thêm một điều, Trong trường hợp bạn chỉ muốn kiểm tra xem mọi thứ được tạo ra trong JSONObject hay không bạn có thể sử dụng dài (), vì theo mặc định khi JSONObject được khởi tạo và không có chìa khóa được chèn, nó chỉ có dấu ngoặc vuông trống {}và sử dụng (Khóa chuỗi) không có ý nghĩa gì.

Vì vậy, bạn có thể trực tiếp viết if (jsonObject.length() > 0)và làm những việc của bạn.

Chúc bạn học tập vui vẻ!


0

Bạn có thể sử dụng JsonNode # hasNonNull (String fieldName) , nó trộn phương thức has và xác minh xem nó có phải là giá trị null hay không

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.