Java용 Gson을 사용한 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의 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());
이 접근 방식을 사용하면Response
class는 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
'programing' 카테고리의 다른 글
Nuxt에서의 변환 타입에 대한 상수 사용 (0) | 2022.07.16 |
---|---|
Vuex 스토어 및 타이프 스크립트 (0) | 2022.07.16 |
문자열에 메모리 공간을 동적으로 할당하고 사용자로부터 해당 문자열을 가져오려면 어떻게 해야 합니까? (0) | 2022.07.16 |
C/C++에서의 누적 정규 분포 함수 (0) | 2022.07.16 |
Vue-i18n 싱글 파일 컴포넌트가 작동하지 않음 (0) | 2022.07.16 |