Bagaimana cara memeriksa apakah kunci json ada?

165

Jadi, saya mendapatkan beberapa nilai JSON dari server tetapi saya tidak tahu apakah akan ada bidang tertentu atau tidak.

Jadi seperti:

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

Dan terkadang, akan ada bidang tambahan seperti:

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

Saya ingin memeriksa apakah bidang bernama "klub" ada sehingga pada parsing saya tidak akan mendapatkan org.json.JSONException: Tidak ada nilai untuk klub

Adam Varhegyi
sumber
if (jsonObject.getString ("club")! = null) {// dapatkan vale di sini}
Software Sainath
3
Tidak, pada pengecualian penanganan kode berhenti, dan tindakan parse lebih lanjut tidak akan berjalan.
Adam Varhegyi
1
@SoftwareSainath Thats tidak berfungsi, masih ada pengecualian.
Adam Varhegyi
String clubvalue = ""; coba (clubvalue = jsonobject.getString ("club");} catch (Exception e) {}
Software Sainath

Jawaban:

266

Kelas JSONObject memiliki metode bernama "has":

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

Mengembalikan nilai true jika objek ini memiliki pemetaan untuk nama. Pemetaannya mungkin NULL.

Pengembang PX
sumber
28
karena "mengandung" terlalu klise? :)
Omri374
Bagaimana jika kuncinya dari Integertipe?
Eido95
2
@ Eido95 memiliki Integersebagai kunci terdengar seperti latihan yang buruk. JSON harus dengan kunci String dan nilai apa pun yang Anda butuhkan.
Nico
@ Eido95, saya percaya untuk integer selalu ada nilai, setiap kali Anda mendeklarasikan integer, Anda harus menginisialisasi dengan sebuah nilai.
mut tony
154

Anda dapat memeriksa dengan cara ini di mana 'HAS' - Mengembalikan nilai true jika objek ini memiliki pemetaan nama. Pemetaannya mungkin NULL.

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

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

Anda juga dapat memeriksa menggunakan 'isNull' - Mengembalikan nilai true jika objek ini tidak memiliki pemetaan untuk nama atau jika memiliki pemetaan yang nilainya NULL.

if (!json.isNull("club"))
    String club = json.getString("club"));
Nirali
sumber
1
json lib mana yang Anda gunakan, dapatkah Anda memberikan contoh sederhana untuk json-smart atau json-simple
samuel owino
@samuelowino json adalah variabel yang berisi objek Anda
Fernando Torres
17

Anda bisa JSONObject#has, memberikan keyinput sebagai dan memeriksa apakah metode kembali trueatau false. Anda juga bisa

gunakan optStringsebagai ganti getString:

Mengembalikan nilai yang dipetakan berdasarkan nama jika ada, memaksanya jika perlu. Mengembalikan string kosong jika tidak ada pemetaan seperti itu

Sabuk hitam
sumber
1
Meskipun metode ini mungkin bermanfaat bagi orang lain, ini tidak kembali jika nilainya ada. Jika getStringakan mengembalikan string kosong, optStringjuga akan mengembalikan string kosong. Asumsi akan membuat Anda percaya bahwa properti tidak tersedia dalam situasi OP.
halfpastfour.am
@ Blackbelt Anda punya sumber untuk ini?
tsuz
10

Kamu bisa memakai has

public boolean has(String key)

Tentukan apakah JSONObject berisi kunci tertentu .

Contoh

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
}
IntelliJ Amiya
sumber
10

sebelum membaca kunci periksa seperti sebelum membaca

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
}

definisi fungsi isNull

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

dokumentasi resmi di bawah tautan untuk isNullfungsi

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

Stack Overflow Pengguna
sumber
2

Coba ini

if(!jsonObj.isNull("club")){
    jsonObj.getString("club");
}
R9J
sumber
2
isNullsebenarnya untuk memeriksa apakah pemetaan adalah nol, bukan untuk memeriksa ketersediaan anggota json.
Reza_Rg
2

Cara yang lebih baik, daripada menggunakan kondisional seperti:

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

adalah dengan menggunakan metode optString () yang ada, seperti ini:

String club = json.optString("club);

metode optString ("key") akan mengembalikan String kosong jika kunci tersebut tidak ada dan karena itu tidak akan memberikan Anda pengecualian.

fuzzKitty
sumber
2

Json memiliki metode yang disebut containsKey().

Anda dapat menggunakannya untuk memeriksa apakah kunci tertentu terkandung dalam set 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
}
Udana Methmal
sumber
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;

berfungsi di semua browser saat ini.

cdturner
sumber
1

Coba ini:

let json=yourJson

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

Anda dapat mencoba ini untuk memeriksa apakah kunci ada atau tidak:

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

Saya hanya menambahkan hal lain, Jika Anda hanya ingin memeriksa apakah ada yang dibuat di JSONObject atau tidak, Anda dapat menggunakan length (), karena secara default ketika JSONObject diinisialisasi dan tidak ada kunci yang dimasukkan, itu hanya memiliki kawat gigi kosong {}dan menggunakan telah (Kunci string) tidak masuk akal.

Jadi Anda bisa langsung menulis if (jsonObject.length() > 0) dan melakukan hal-hal Anda.

Selamat belajar!

Gurinder
sumber
0

Anda dapat menggunakan JsonNode # hasNonNull (String fieldName) , itu mencampur metode has dan verifikasi jika itu adalah nilai nol atau tidak

Tiago Coelho
sumber