[java] Gson for Java를 사용한 JSON 구문 분석

유형의 JSON에서 데이터를 구문 분석하고 싶습니다 String. Google Gson을 사용하고 있습니다 .

나는 가지고있다:

jsonLine = "
{
 "data": {
  "translations": [
   {
    "translatedText": "Hello world"
   }
  ]
 }
}
";

내 수업은 다음과 같습니다

public class JsonParsing{

   public void parse(String jsonLine) {

      // there I would like to get String "Hello world"

   }

}



답변

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

 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").getAsString();
    return result;
}

보다 일반적으로 사용하려면 Gson의 javadoc 이 매우 명확하고 유용 하다는 것을 알 수 있습니다.


답변

첫 번째 gson 응용 프로그램에서는 구성 문제에 json을 사용하기 때문에 추가 클래스를 사용하여 값을 포착하지 않았습니다.

정보가 부족하더라도 (gson 페이지조차도), 내가 찾은 것입니다.

~에서 시작

Map jsonJavaRootObject = new Gson().fromJson("{/*whatever your mega complex object*/}", Map.class)

gson이 {}를 볼 때마다 Map (실제로 gson StringMap)을 만듭니다.

gson이 ”를 볼 때마다 문자열을 만듭니다.

gson이 숫자를 볼 때마다 Double을 만듭니다.

gson이 []를 볼 때마다 ArrayList를 만듭니다.

이 사실을 당신의 이점에 결합하여 사용할 수 있습니다

마지막으로 이것은 일을 만드는 코드입니다.

        Map<String, Object> javaRootMapObject = new Gson().fromJson(jsonLine, Map.class);

    System.out.println(
        (
            (Map)
            (
                (List)
                (
                    (Map)
                    (
                        javaRootMapObject.get("data")
                    )
                 ).get("translations")
            ).get(0)
        ).get("translatedText")
    );


답변

가장 간단한 것은 일반적으로 다음과 같이 일치하는 객체 계층을 만드는 것입니다.

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

그런 다음 GSON을 사용하여 바인딩하고 필드를 통해 객체 계층을 통과합니다. 기본 데이터 컨테이너에는 게터 및 세터 추가가 의미가 없습니다.

그래서 같은 :

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


답변

json 객체에 해당하는 Java 클래스를 만들 수 있습니다. 정수 문자열 값을 그대로 매핑 할 수 있습니다. JSON은 다음과 같이 파싱 될 수 있습니다.

Gson gson = new GsonBuilder().create(); 
Response r = gson.fromJson(jsonString, Response.class);

예를 들면 다음과 같습니다. http://rowsandcolumns.blogspot.com/2013/02/url-encode-http-get-solr-request-and.html


답변

별도의 클래스를 사용하여 JSON 객체를 나타내고 @SerializedName주석을 사용하여 각 데이터 멤버에 대해 가져올 필드 이름을 지정할 수 있습니다.

public class Response {

   @SerializedName("data")
   private Data data;

   private static class Data {
      @SerializedName("translations")
      public Translation[] translations;
   }

   private static class Translation {
      @SerializedName("translatedText")
      public String translatedText;
   }

   public String getTranslatedText() {
      return data.translations[0].translatedText;
   }
}

그런 다음 Gson객체를 사용하여 parse () 메소드에서 구문 분석을 수행 할 수 있습니다 .

Gson gson = new Gson();
Response response = gson.fromJson(jsonLine, Response.class);

System.out.println("Translated text: " + response.getTranslatedText());

이 방법을 사용하면 Response클래스를 재사용하여 다른 추가 필드를 추가하여 JSON에서 추출하려는 다른 데이터 멤버를 선택할 수 있습니다 (예 : 한 번의 호출로 여러 번역에 대한 결과를 얻기 위해 변경하려는 경우, 또는 감지 된 소스 언어에 대한 추가 문자열을 얻습니다.


답변

한 가지 방법은 JsonObject를 만들고 매개 변수를 반복하는 것입니다. 예를 들어

JsonObject jobj = new Gson().fromJson(jsonString, JsonObject.class);

그런 다음 다음과 같은 Bean 값을 추출 할 수 있습니다.

String fieldValue = jobj.get(fieldName).getAsString();
boolean fieldValue = jobj.get(fieldName).getAsBoolean();
int fieldValue = jobj.get(fieldName).getAsInt();

도움이 되었기를 바랍니다.


답변

Gson을 사용하여 해결
json String에서 개별 매개 변수에 대한 클래스를 만들 것입니다. 또는 “Data”라는 하나의 기본 클래스를 만든 다음 내부 클래스를 비슷하게 만들 수 있습니다. 명확성을 위해 별도의 클래스를 만들었습니다.

수업은 다음과 같습니다.

  • 데이터
  • 번역
  • TranslatedText

JsonParsing 클래스에서 “parse”메소드를 호출 gson.fromJson(jsonLine, Data.class)하면 Reflection을 사용하여 Java 객체의 String을 변환합니다.

“데이터”개체에 액세스하면 각 매개 변수에 개별적으로 액세스 할 수 있습니다.

개발자 컴퓨터에서 멀어 질 때이 코드를 테스트 할 기회를 얻지 못했습니다. 그러나 이것은 도움이 될 것입니다.

좋은 예와 기사.
http://albertattard.blogspot.com/2009/06/practical-example-of-gson.html
http://sites.google.com/site/gson/gson-user-guide

암호

public class JsonParsing{

       public void parse(String jsonLine) {

           Gson gson = new GsonBuilder().create();
           Data data = gson.fromJson(jsonLine, Data.class);

           Translations translations = data.getTranslation();
           TranslatedText[] arrayTranslatedText = translations.getArrayTranslatedText(); //this returns an array, based on json string

           for(TranslatedText translatedText:arrayTranslatedText )
           {
                  System.out.println(translatedText.getArrayTranslatedText());
           }
       }

    }


    public class Data{
           private  Translations translations;
          public Translations getTranslation()
          {
             return translations;
          }

          public void setTranslation(Translations translations)
           {
                  this.translations = translations;
           }
    }

    public class Translations
    {
        private  TranslatedText[] translatedText;
         public TranslatedText[] getArrayTranslatedText()
         {
             return translatedText;
         }

           public void setTranslatedText(TranslatedText[] translatedText)
           {
                  this.translatedText= translatedText;
           }
    }

    public class TranslatedText
    {
        private String translatedText;
        public String getTranslatedText()
        {
           return translatedText;
        }

        public void setTranslatedText(String translatedText)
        {
           this.translatedText = translatedText;
        }
    }