programing

Java용 Gson을 사용한 JSON 해석

randomtip 2022. 7. 16. 15:28
반응형

Java용 Gson을 사용한 JSON 해석

JSON 타입의 데이터를 해석하고 싶다.StringGoogle 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의 javadocs는 매우 명확하고 도움이 된다는 것을 알게 될 것입니다.

첫 번째 gson 어플리케이션에서는 주로 설정에 json을 사용하기 때문에 값을 잡기 위해 추가 클래스를 사용하는 것을 피했습니다.

정보가 부족하지만(gson 페이지도 마찬가지) 제가 찾아서 사용한 것입니다.

에서 시작해서

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

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

gson이 "을 볼 때마다 문자열이 생성됩니다.

gson이 숫자를 볼 때마다 Double이 생성됩니다.

gson이 []를 확인할 때마다 Array List가 생성됩니다.

이 사실을 조합하여 유리하게 이용할 수 있습니다.

마지막으로, 이것이 이 물건을 만드는 코드입니다.

        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을 사용하여 바인드하고 필드를 통해 오브젝트 계층을 통과합니다.기본 데이터 컨테이너에서는 getter와 setter를 추가하는 것은 의미가 없습니다.

예를 들어 다음과 같습니다.

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;
   }
}

그런 다음 parse() 메서드로 해석할 수 있습니다.Gson오브젝트:

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

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

이 접근 방식을 사용하면Responseclass는 JSON에서 추출할 수 있는 다른 데이터 멤버를 선택하기 위해 다른 필드를 추가합니다.예를 들어, 1개의 콜로 복수의 변환 결과를 취득하거나 검출된 소스 언어에 대한 문자열을 취득하기 위해 변경을 가하는 경우입니다.

한 가지 방법은 Json Object를 생성하여 매개 변수를 반복하는 것입니다.예를들면

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

다음으로 다음과 같은 빈 값을 추출할 수 있습니다.

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

이게 도움이 됐으면 좋겠다.

Gson을 사용한 문제 해결
json String의 개별 파라미터에 대한 클래스를 만듭니다.또는 "Data"라는 기본 클래스를 하나 만든 다음 비슷하게 내부 클래스를 만들 수 있습니다.나는 명확성을 위해 별도의 수업을 만들었다.

수업은 다음과 같습니다.

  • 데이터.
  • 번역
  • 번역 완료본문

에서는 JsonParsing이라고 .gson.fromJson(jsonLine, Data.class)자바 스트링

"Data" 개체에 액세스할 수 있게 되면 각 매개 변수에 개별적으로 액세스할 수 있습니다.

개발 기계에서 떨어져 있기 때문에 이 코드를 테스트할 기회가 없었습니다.하지만 이게 도움이 될 거야

좋은 예시와 기사들.
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;
        }
    }
    JsonParser parser = new JsonParser();
    JsonObject jo = (JsonObject) parser.parse(data);
    JsonElement je = jo.get("some_array");

    //Parsing back the string as Array
    JsonArray ja = (JsonArray) parser.parse(o.get("some_array").getAsString());
    for (JsonElement jo : ja) {
    JsonObject j = (JsonObject) jo;
        // Your Code, Access json elements as j.get("some_element")
    }

이와 같은 JSON을 해석하는 간단한 예

{ "some_array" : " ""some_more_more\contains\:2"", "some_other_contains" : 3 。

먼저 아래 구문 분석 사이트를 사용하여 getter 및 setter 생성

http://www.jsonschema2pojo.org/

이제 Gson 사용

GettetSetterClass object=new Gson().fromjson(jsonLine, GettetSetterClass.class);

이제 객체를 사용하여 데이터, 변환 등의 값을 가져옵니다.본문

JsonPath 쿼리를 사용하여 값을 추출할 수 있습니다.Gson이 지원하는 JsonSurfer를 사용하면 두 줄의 코드만으로 문제를 해결할 수 있습니다.

    JsonSurfer jsonSurfer = JsonSurfer.gson();
    String result = jsonSurfer.collectOne(jsonLine, String.class, "$.data.translations[0].translatedText");

한 줄 코드:

System.out.println(new Gson().fromJson(jsonLine,JsonObject.class).getAsJsonObject().get("data").getAsJsonObject().get("translations").getAsJsonArray().get(0).getAsJsonObject().get("translatedText").getAsString());

언급URL : https://stackoverflow.com/questions/5490789/json-parsing-using-gson-for-java

반응형