2013-05-31 6 views
0

json 형식의 문자열이 있는데 해당 json에서 특정 값을 추출하려고합니다. 예를 들어 는 :자바에서 json 문자열의 값을 추출하십시오.

{"foo":"this is foo", "bar":{"nested_bar": "this is nested bar"} } 

사용자는 foo 또는 bar 또는 둘 모두를 인쇄 할 수 있습니다.

지금 당장 플랫 JSON 만 읽을 수있는 간단한 클래스가 있습니다.

중첩 된 json을 포함하도록 다음 코드를 수정하려면 어떻게해야합니까?

또 다른 질문은 평면 json에서 추출하려는 태그를 나타내는 좋은 방법은 무엇입니까? 나는 배열을 지나가고 있었다.

public class JsonParser { 

public static String[] tagsToExtract; 



public JsonParser(String[] tags){ 
    tagsToExtract = tags; 
} 


public HashMap<String, Object> extractInformation(Text line) throws JSONException{ 
    HashMap<String, Object> outputHash = new HashMap<String, Object>(); 
    JSONObject jsn = new JSONObject(line.toString()); 
    for (int i =0; i < tagsToExtract.length; i++){ 
     outputHash.put(tagsToExtract[i],jsn.get(tagsToExtract[i].toString())); 
    } 
    return outputHash; 

} 

} 
+5

다음과 같은 JSON 구문 분석 라이브러리를 사용 해본 적이 있습니까? 예를 들어, 잭슨? – fge

+2

예, json.org에 가면 Java 용 JSON 파서가 약 ​​10 개 나열됩니다. –

답변

1

원하는대로 정확하게 수행 할 수있는 Java 용 JSON 라이브러리가 많이 있습니다. 더 높은 평가를 받고있는 사람 몇은 다음과 같습니다

그리고

독자가 파서를 작성하는 데 정말로 관심이 있다면, 힌트는 재귀를 이용하는 것입니다. 이 같은 JSON 객체 뭔가가 있다고 가정 :

당신이 최상위 개체를 구문 분석을 시작할 때, 당신은 당신이 각 값을 구문 분석 할 때 일을 할 것 같은 일을 정확하게하고있는 것을
{ 
    prop1: (some value), 
    prop2: (some value), 
    ... 
} 

공지 사항 - 때문에 값 자체는 또 다른 JSON 객체 일 수 있습니다. 따라서 간단한 방법은 값을 처리하지 않고 키와 관련 값을 문자열로 가져 오는 파서를 작성하는 것입니다. 그런 다음 각 값에 대해 동일한 알고리즘을 다시 호출하십시오. 문자열, 숫자 등 평범한 값에 도달 할 때까지 계속됩니다.

관련 문제