Pertanyaan Android Json dan nilai nol


Bagaimana saya bisa mendeteksi ketika nilai json adalah nol? sebagai contoh: [{"nama pengguna": null}, {"nama pengguna": "null"}]

Kasus pertama mewakili nama pengguna yang tidak ada dan yang kedua adalah pengguna bernama "null". Tetapi jika Anda mencoba mengambil keduanya, kedua hasil menghasilkan string "null"

JSONObject json = new JSONObject("{\"hello\":null}");
json.put("bye", JSONObject.NULL);
Log.e("LOG", json.toString());
Log.e("LOG", "hello="+json.getString("hello") + " is null? "
                + (json.getString("hello") == null));
Log.e("LOG", "bye="+json.getString("bye") + " is null? "
                + (json.getString("bye") == null));

Output log adalah

{"hello":"null","bye":null}
hello=null is null? false
bye=null is null? false

75
2018-05-14 18:12


asal


Jawaban:


Coba dengan json.isNull( "field-name" ).

Referensi: http://developer.android.com/reference/org/json/JSONObject.html#isNull%28java.lang.String%29


194
2018-05-14 18:15



Karena JSONObject # getString mengembalikan nilai jika kunci yang diberikan ada, itu tidak nol menurut definisi. Inilah alasan JSONObject.NULL ada: untuk mewakili nilai null JSON.

json.getString("hello").equals(JSONObject.NULL); // should be false
json.getString("bye").equals(JSONObject.NULL); // should be true

13
2018-05-14 18:16



Untuk Android, ini akan meningkatkan JSONException jika tidak ada pemetaan semacam itu. Jadi Anda tidak dapat memanggil metode ini secara langsung.

json.getString("bye")

jika data Anda dapat kosong (mungkin tidak ada kunci), coba

json.optString("bye","callback string");

atau

json.optString("bye");

sebagai gantinya.

Dalam kode demo Anda,

JSONObject json = new JSONObject("{\"hello\":null}");
json.getString("hello");

ini yang Anda dapatkan adalah String "null" bukan null.

penggunaan shoud Anda

if(json.isNull("hello")) {
    helloStr = null;
} else {
    helloStr = json.getString("hello");
}

12
2018-03-11 08:36



periksa dulu dengan isNull().... jika tidak berfungsi maka cobalah belows

dan juga Anda miliki JSONObject.NULL untuk memeriksa nilai nol ...

 if ((resultObject.has("username")
    && null != resultObject.getString("username")
    && resultObject.getString("username").trim().length() != 0)
      {
               //not null
        }

dan dalam kasus Anda juga periksa resultObject.getString("username").trim().eqauls("null")


3
2018-05-14 18:16



Jika Anda harus mengurai json dulu dan menangani objek nanti, coba ini

Parser

Object data = json.get("username");

Handler

if (data instanceof Integer || data instanceof Double || data instanceof Long) {
     // handle number ;
} else if (data instanceof String) {
     // hanle string;               
} else if (data == JSONObject.NULL) {
     // hanle null;                 
}

3
2018-03-07 10:10



Berikut ini metode pembantu yang saya gunakan sehingga saya bisa mendapatkan string JSON hanya dengan satu baris kode:

public String getJsonString(JSONObject jso, String field) {
    if(jso.isNull(field))
        return null;
    else
        try {
            return jso.getString(field);
        }
        catch(Exception ex) {
            LogHelper.e("model", "Error parsing value");
            return null;
        }
}

dan kemudian sesuatu seperti ini:

String mFirstName = getJsonString(jsonObject, "first_name");

akan memberi Anda nilai string atau aman mengatur variabel string Anda ke nol. Saya menggunakan Gson kapan pun saya bisa untuk menghindari jebakan seperti ini. Ini menangani nilai nol jauh lebih baik menurut saya.


2
2017-07-30 00:46