2014-02-25 5 views
1

GSON을 사용하여 Java에 대한 일부 JSON 데이터를 구문 분석하려고하지만 형식이 잘못되어이를 수행 할 수 없습니다. 나는 주변을 둘러 보았지만 발견 한 정보 중 아무 것도 이것을 해결하는 데 도움이되지 않았습니다. 필자는 JSON에 대해 많은 경험을 쌓지 못했지만, 특히 Java로 파싱 할 때 그러했다. 나는 이것을 위해 어떤 도움을 주셔서 감사하겠습니다.Java에서 JSON url 구문 분석

JSON의 URL : http://xpaw.ru/mcstatus/status.json

편집 :

나는 잭슨 사용에 대한 당신의 조언을했다 몇 가지 가이드를 통해 가서 그것을 만드는 시도, Heres는 내 코드 :

메인 클래스 : http://pastebin.com/XRcpkAuP

UptimeCheck 클래스 : pastebin/f2UanvhY (죄송합니다. 두 개 이상의 링크를 게시 할 수 없습니다 : /)

어떤 이유로 든 링크를 파싱 할 수없는 것 같습니다. 누군가 나를 도울 수 있겠습니까? 고맙습니다.

+2

을 의미합니까? 궁극적으로 왜 실패 하는가? –

+1

유행하고 정확한 문제를 공유 할 수 있습니다 –

+0

http://jsonlint.com/은 json이 유효 함을 보여줍니다. – Nicole

답변

1

. Jackson은 고성능 JSON 프로세서 Java 라이브러리입니다.

이하의 발췌 문장은이 라이브러리에 기본적인 아이디어를 제공합니다.

//1. Convert JSON to Java object 
ObjectMapper mapper = new ObjectMapper(); 
User user = mapper.readValue(new File("c:\\report_data.json"), ReportData.class); 

//2. Convert Java object to JSON format 
ObjectMapper mapper = new ObjectMapper(); 
mapper.writeValue(new File("c:\\report_data.json"), reportData); 

모두 writeValue()readValue()InputStreamOutputStream의 다른 유형을 지원하기 위해 많은 오버로드 된 메서드가 있습니다. 참조 용

예 : 당신은 "방식으로 인해이 포맷"무엇을 http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

Shishir

0

gson에 대해 모르겠지만 JSON 문자열은 유효합니다. 다음을 사용할 수 있습니다.

이것은 간단한 코드이므로 모든 검사를 피했지만 이것이 주요 아이디어입니다.

public String parse(String jsonLine) { 
    JsonElement jelement = new JsonParser().parse(jsonLine); 
    JsonObject jobject = jelement.getAsJsonObject(); 
    jobject = jobject.getAsJsonObject("data"); 
    JsonArray jarray = jobject.getAsJsonArray("translations"); 
    jobject = jarray.get(0).getAsJsonObject(); 
    String result = jobject.get("translatedText").toString(); 
    return result; 
} 

더 일반적인 사용 - [javadoc] [1]이 매우 명확하고 도움이된다는 것을 알게 될 것입니다. 내가 GSON 좋은 것 같다 사용 .. 또 다른 기사에서 읽을

0

....

간단한 일이 보통과 같이, 개체 계층 구조를 일치 만드는 것입니다 :

이것은 예를 들어

입니다
public class Wrapper { 
    public Data data; 
} 
static class Data { 
    public Translation[] translations; 
} 
static class Translation { 
    public String translatedText; 
} 

그리고 나서 GSON을 사용하여 필드를 통해 개체 계층을 트래버스합니다. 기본 데이터 컨테이너의 경우 getter 및 setters를 추가하는 것은 의미가 없습니다.

그래서 같은 것을 : 나는 개인적으로 자바로/JSON 변환 잭슨을 사용하는 것이 좋습니다

Wrapper value = GSON.fromJSON(jsonString, Wrapper.class); 
String text = value.data.translations[0].translatedText; 
+2

Stackoverflow는 대화 스레드가있는 포럼이 아닙니다. 업데이트 된 정보로 원래 답변을 간단하게 편집 할 수있는 새로운 답변을 게시 할 이유가 거의 없습니다. –

+0

@PaulRichter 질문에 단 하나의 대답 만 있으면 안됩니다. 내 대답이 모두 비슷하다면 편집 할 수 있었지만 여기서는 1이 GSON이고 다른 하나는 GSON이 없다. 그래서 나는 왜 스택 오버플로가 사용자가 질문에 대해 1 개 이상의 대답을 게시 할 수 있는지에 대해 편집해야한다고 생각하지 않습니다. –

+0

다른 대답을 삭제 한 것을 보았으므로 이제는 논점이되었습니다. 가장 중요한 문제는 두 가지 대답 모두 매우 일반적이라는 것입니다. 그들이 "틀린"(그리고 당신이 도움이되기 위해 노력하고있는) 동안, OP 질문에 관해서는 "정확하지"않았습니다. 왜냐하면 우리는 구체적이고 간결한 대답을하기에 충분한 정보가 없었기 때문입니다. 궁극적으로, 두 가지 게시물이 분명히 별개 *가 아니면 두 번 답변 자체는 피할 수 있습니다. 일반적으로 그러한 상황은 질문 자체가 너무 일반적이어서 (그리고 닫아야 할 수도 있음) 좋은 징조이기 때문에 권장하지 않습니다. –