假设有以下JSON文档:
{
"id": "file",
"value": "File",
"popup": { /* complex object here */
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}
我只对id
和value
感兴趣,并希望将popup
存储为字符串,我将存储到数据库并在需要时稍后解析。
我试图将其解析为此类,但我收到错误:预期STRING但是BEGIN_OBJECT 。
class Object {
@Expose String id;
@Expose String value;
@Expose String popup;
}
Gson可以吗?
答案 0 :(得分:0)
为什么不为弹出键获取JSONObject并将其转换为字符串?
JSONObject posts=new JSONObject(json);
String popup=posts.getJSONObject("popup").toString();
答案 1 :(得分:0)
在Gson中,每个JSON对象都被视为一个类,您将使用它来获取响应的便利类,以便您可以直接从json字符串填充对象,而不是进行循环的忙碌
我已经编写了一些测试类,可以帮助您获得正在寻找的输出,反之亦然。
MenuItem.java
import com.google.gson.annotations.SerializedName;
public class MenuItem {
@SerializedName("value")
private String value;
@SerializedName("onclick")
private String onclick;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getOnclick() {
return onclick;
}
public void setOnclick(String onclick) {
this.onclick = onclick;
}
}
PopUp.java
import java.util.ArrayList;
import com.google.gson.annotations.SerializedName;
public class PopUp {
@SerializedName("menuitem")
private ArrayList<MenuItem> menuItems;
public ArrayList<MenuItem> getMenuItems() {
return menuItems;
}
public void setMenuItems(ArrayList<MenuItem> menuItems) {
this.menuItems = menuItems;
}
}
Response.java
import com.google.gson.annotations.SerializedName;
public class Response {
@SerializedName("id")
private String id;
@SerializedName("value")
private String value;
@SerializedName("popup")
private PopUp popup;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public PopUp getPopup() {
return popup;
}
public void setPopup(PopUp popup) {
this.popup = popup;
}
}
不,我们有我们需要的类,我们将运行它来测试它是否按照测试代码
运行PopUpTestDrive.java
import java.util.ArrayList;
import com.google.gson.Gson;
public class PopUpTestDrive {
public static void main(String[] args) {
ArrayList<MenuItem> menuItems = new ArrayList<>();
for (int i = 0; i < 3; i++) {
MenuItem item = new MenuItem();
item.setOnclick("Onclick:_"+i);
item.setValue("Value_"+i);
menuItems.add(item);
}
PopUp popUp = new PopUp();
popUp.setMenuItems(menuItems);
Response response = new Response();
response.setId("file");
response.setValue("File");
response.setPopup(popUp);
String jsonResult = (new Gson()).toJson(response);
System.out.println(""+jsonResult);
}
}
输出
{
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{
"value": "Value_0",
"onclick": "Onclick:_0"
},
{
"value": "Value_1",
"onclick": "Onclick:_1"
},
{
"value": "Value_2",
"onclick": "Onclick:_2"
}
]
}
}