JSON 키가 있는지 확인하는 방법?


165

따라서 서버에서 일부 JSON 값을 얻지 만 특정 필드가 있는지 여부는 알 수 없습니다.

그처럼:

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

때로는 다음과 같은 추가 필드가 있습니다.

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

구문 분석시 org.json.JSONException을 얻지 않도록 "club"이라는 필드가 있는지 확인하고 싶습니다 .


if (jsonObject.getString ( "club")! = null) {// 여기에 값을 올리십시오}
소프트웨어 Sainath

3
아니요, 예외 처리시 코드가 중지되고 추가 구문 분석 작업이 실행되지 않습니다.
Adam Varhegyi

1
@SoftwareSainath 작동하지 않지만 여전히 예외가 발생했습니다.
Adam Varhegyi

String clubvalue = ""; try (clubvalue = jsonobject.getString ( "club");} catch (Exception e) {}
소프트웨어 Sainath

답변:


266

JSONObject 클래스에는 "has"라는 메소드가 있습니다.

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

이 객체에 이름의 매핑이있는 경우에 true를 리턴합니다. 매핑이 NULL 일 수 있습니다.


28
"포함"이 너무 굵기 때문에? :)
Omri374

키가 Integer유형 에서 온 경우 어떻게합니까?
Eido95

2
@ Eido95를 Integer키로 사용하는 것은 나쁜 습관처럼 들립니다. JSON에는 문자열 키와 필요한 값이 있어야합니다.
Nico

@ Eido95, 정수는 항상 값이 있다고 생각합니다. 정수를 선언 할 때마다 값으로 초기화해야합니다.
mut tony

154

'HAS'-이 오브젝트에 이름에 대한 맵핑이 있으면 true를 리턴합니다. 매핑이 NULL 일 수 있습니다.

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

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

'isNull'을 사용하여 확인할 수도 있습니다.이 오브젝트에 이름에 대한 맵핑이 없거나 값이 NULL 인 맵핑이있는 경우 true를 리턴합니다.

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

1
이는 JSON lib 디렉토리는 JSON 스마트 또는 JSON - 간단한에 대한 간단한 예를 제공 할 수 있습니다, 당신이 사용하는
owino 사무엘을

@samuelowino json은 가변 개체입니다
Fernando Torres

17

당신은 수 JSONObject#has의를 제공하는 key메소드가 리턴하는 경우 입력 및 확인으로 truefalse. 당신은 또한 할 수 있습니다

optString대신에 사용하십시오 getString:

존재하는 경우 이름으로 매핑 된 값을 반환하고 필요한 경우 강제로 반환합니다. 그러한 매핑이 존재하지 않으면 빈 문자열을 반환


1
이 방법은 다른 방법으로 사용될 수 있지만 값이 존재하면 반환되지 않습니다. 경우 getString빈 문자열을 반환 것, optString또한 빈 문자열을 반환합니다. 그러면 OP의 상황에서는 해당 부동산을 이용할 수 없다고 가정하게됩니다.
halfpastfour.am

@Blackbelt 이것에 대한 소스가 있습니까?
tsuz

10

당신이 사용할 수있는 has

public boolean has(String key)

JSONObject특정 키 가 포함되어 있는지 확인하십시오 .

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

키를 읽기 직전에 읽기 전에 확인하십시오.

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
}

isNull 함수 정의

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

isNull기능에 대한 링크 아래 공식 문서

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


2

이 시도

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

2
isNull실제로 json 멤버의 가용성을 확인하는 것이 아니라 매핑이 null인지 확인하기위한 것입니다.
Reza_Rg

2

다음과 같은 조건을 사용하는 대신 더 좋은 방법입니다.

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

다음과 같이 기존 메소드 optString ()을 사용하는 것입니다.

String club = json.optString("club);

키가 존재하지 않고 optString ( "key") 메소드는 빈 문자열을 리턴하므로 예외가 발생하지 않습니다.


2

Json이라는 메소드가 containsKey()있습니다.

이를 사용하여 특정 키가 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;

모든 현재 브라우저에서 작동합니다.



1

키의 존재 여부를 확인하기 위해 이것을 시도 할 수 있습니다.

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

0

난 그냥 당신은 그냥 아무것도 된 JSONObject에서 생성되어 있는지 여부를 확인하려면 또는 사용할 수없는 경우, 다른 일을 추가하고 길이 된 JSONObject를 초기화하고 더 키가 삽입되지 않은 경우 때문에 기본적으로 (), 그냥 빈 괄호를 가지고 {}와 사용 (문자열 키)는 의미가 없습니다.

따라서 직접 글을 작성 if (jsonObject.length() > 0)하고 할 수 있습니다 .

행복한 학습!


0

당신은 사용할 수 있습니다 JsonNode # hasNonNull (문자열의 fieldName)이 , 그것은 혼합 그것이 경우 방법과 검증을 값 여부

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.