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());
With this approach, you can reuse the Response
class to add any other additional fields to pick up other data members you might want to extract from JSON -- in case you want to make changes to get results for, say, multiple translations in one call, or to get an additional string for the detected source language.
Using Gson to Solve
I would create a class for individual parameter in the json String. Alternatively you can create one main class called "Data" and then create inner classes similarly. I created separate classes for clarity.
The classes are as follows.
- Data
- Translations
- TranslatedText
In the class JsonParsing the method "parse" we call gson.fromJson(jsonLine, Data.class)
which will convert the String in java objects using Reflection.
Once we have access to the "Data" object we can access each parameter individually.
Didn't get a chance to test this code as I am away from my dev machine. But this should help.
Some good examples and articles.
http://albertattard.blogspot.com/2009/06/practical-example-of-gson.html
http://sites.google.com/site/gson/gson-user-guide
Code
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;
}
}
One way would be created a JsonObject and iterating through the parameters. For example
JsonObject jobj = new Gson().fromJson(jsonString, JsonObject.class);
Then you can extract bean values like:
String fieldValue = jobj.get(fieldName).getAsString();
boolean fieldValue = jobj.get(fieldName).getAsBoolean();
int fieldValue = jobj.get(fieldName).getAsInt();
Hope this helps.
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")
}
A simple example to parse a JSON like this
{ "some_array" : "[\"some_element\":1,\"some_more_element\":2]" , "some_other_element" : 3 }
Firstly Generate Getter And Setter using below parsing site
http://www.jsonschema2pojo.org/
Now use Gson
GettetSetterClass object=new Gson().fromjson(jsonLine,GettetSetterClass.class);
Now use object to get values such as data,translationText
You can use a JsonPath query to extract the value. And with JsonSurfer which is backed by Gson, your problem can be solved by simply two line of code!
JsonSurfer jsonSurfer = JsonSurfer.gson();
String result = jsonSurfer.collectOne(jsonLine, String.class, "$.data.translations[0].translatedText");
One line code:
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' 카테고리의 다른 글
iOS 13 전체 화면에서 모달 표시 (0) | 2020.06.14 |
---|---|
iPhone 시뮬레이터에 .ipa 파일을 설치하는 방법 (0) | 2020.06.14 |
ngRepeat 사용시 표시되는 결과 수 제한 (0) | 2020.06.14 |
Windows 배치 파일에서 무한 루프를 만드는 방법은 무엇입니까? (0) | 2020.06.14 |
iOS에서 인터넷 연결을 감지하는 가장 쉬운 방법은 무엇입니까? (0) | 2020.06.14 |