2014-02-27 6 views
0

예 문제 추출 값을 갖는JSON에서

{"name":"tv.twitch:twitch:5.16"} 

{"name":"tv.twitch:twitch-external-platform:4.5","extract":{"exclude":["META-INF/"]},"natives":{"windows":"natives-windows-${arch}"},"rules":[{"os":{"name":"windows"},"action":"allow"}]} 

이 라인은 JSONArray에서 온을, 나는 "원주민"부분을 추출하고 싶습니다. 문제는 JSONArray의 모든 항목이 "네이티브"값을 가지고있는 것은 아니라는 점입니다. 여기에 내 현재 코드는 "원주민"값없이 배열에서 객체를 내가 자바/JSON 구문 분석에 새로운 오전부터

JSONObject json = new JSONObject(readUrl(url.toString())); 
JSONArray jsonArray = json.getJSONArray("libraries"); 

ArrayList<String> libraries = new ArrayList<String>(); 
for (int i = 0; i < jsonArray.length(); i++) { 
    JSONObject next = jsonArray.getJSONObject(i); 
    String lib = next.getString("name"); 
    libraries.add(lib); 
} 

내가 이것에 대해 정확히 모르겠어요 "이름"값을 추출하지만 것입니다 프로그램을 종료 시키시겠습니까?

+1

'json.org' 클래스를 사용하고 있다면; 'JSONObject'는 키가 있는지 판별하기 위해'has (String)'메소드를 가지고 있습니다. – qqilihq

+0

"이름", "네이티브"가 필요합니다.이 경우 "windows" – ReidandKat

+0

"원주민"값을 얻을 때'try-catch' 블록 만 사용하십시오. – nikis

답변

1

JSONObject에서 has 메서드를 사용하여 지정된 키가 포함되어 있는지 여부를 확인할 수 있습니다.

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

귀하의 경우에는 다음과 같이 할 수 있습니다

JSONObject json = new JSONObject(readUrl(url.toString())); 
if(json.has("natives")) { 
    //Logic to extract natives 
} else { 
    //Logic to extract without natives 
} 

나는이 단순한 라인이 귀하의 요구에 대한 충분한다고 생각합니다. API 참조 : here

+0

예, 이것은 "q"방법에 대해 qqilihq이 언급 한 후에 정확히 수행 한 것입니다 – ReidandKat

+0

그것이 맞는다면 대답을 수락하십시오;) –

1

/extract/natives/windows에 콘텐츠를 추출하고 싶은 것 같습니다.

if (windowsNode.isMissingNode()) 
    // deal with no windows content 
: 노드가 실제로 존재하는지 .isMissingNode() 대해 체크 확인이어서

// All of these are thread safe 
private static final ObjectReader READER = JacksonUtils.getReader(); 
private static final JsonPointer NAME_POINTER = JsonPointer.of("name"); 
private static final JsonPointer WINDOWS_POINTER 
    = JsonPointer.of("extract", "native", "windows"); 

// Fetch content from URL 
final JsonNode content = READER.readTree(url.getInputStream()); 
// Get content at pointers, if any 
final JsonNode nameNode = NAME_POINTER.path(content); 
final JsonNode windowsNode = WINDOWS_POINTER.path(content); 

, (잭슨에 따라) this library를 사용하여이 경우

은 그만큼 간단

.path() 대신 .get()을 사용하고 null을 확인하십시오.