Error when parsing JSON using GSON
You need to parse the JSON in android, using GSON, into the Map object. JSON comes from Yandex. Translate. I tried to use the following:
Gson gson = new GsonBuilder().create();
try {
Response<Object> response = call.execute();
JsonReader reader = new JsonReader(new StringReader(response.body().toString()));
reader.setLenient(true);
Map<String, String> map = gson.fromJson(reader, Map.class);
for (Map.Entry pair: map.entrySet()) {
if (pair.getKey().equals("text")) {
translatedText = pair.getValue().toString();
}
}
} catch (IOException e) {
e.printStackTrace();
}
This works well when trying to translate a single word. But when translating several words, an error occurs:
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated array at line 1 column 40 path $.[1]
at com.google.gson.Gson.fromJson(Gson.java:947)
at translater.Adapter.translate(Adapter.java:53)
at translater.MainActivity$1.onClick(MainActivity.java:34)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22433)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
How do I fix this ?
Sample JSON:
{
"code": 200,
"lang": "en-ru",
"text": [
"Здравствуй, Мир!"
]
}
0
Author: Александр Штундер, 2019-12-28
1 answers
import com.google.gson.Gson;
import java.util.Arrays;
public class Model {
private Integer code;
private String[] text;
private String lang;
public static void main(String[] args) {
Gson gson = new Gson();
String json = "{\n"
+ " \"code\": 200,\n"
+ " \"lang\": \"en-ru\",\n"
+ " \"text\": [\n"
+ " \"Здравствуй, Мир!\"\n"
+ " ]\n"
+ "}";
Model fromJson = gson.fromJson(json, Model.class);
System.out.println(fromJson);
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String[] getText() {
return text;
}
public void setText(String[] text) {
this.text = text;
}
public String getLang() {
return lang;
}
public void setLang(String lang) {
this.lang = lang;
}
@Override
public String toString() {
return "Model [code = " + code + ", text = " + Arrays.toString(text) + ", lang = " + lang + "]";
}
}
1
Author: Дмитрий, 2019-12-28 22:55:38