유형의 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;
}
}