【发布时间】:2022-11-17 03:43:59
【问题描述】:
我想将 JSON 对象转换回 Person 对象 java,但出现以下错误 java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at path $
示例 Json 文件:
{
"type":"set",
"key":"person",
"value":{
"name":"Elon Musk",
"car":{
"model":"Tesla Roadster",
"year":"2018"
},
"rocket":{
"name":"Falcon 9",
"launches":"87"
}
}
}
JsonObject jsonObject = new JsonParser().parse(input.readUTF()).getAsJsonObject();
Gson gson = new Gson();
for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
Person person = gson.fromJson(entry.getValue(), Person.class);
System.out.println(jsonFile);
}
@Getter
@Setter
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Person {
String type;
String key;
Value value;
}
@Data
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Getter
@ToString
public class Value {
String name;
Map<String, String> car;
Map<String, String> rocket;
}
【问题讨论】:
-
请添加有关您收到的错误的更多详细信息。在我看来,您的解析转换类有点错误,很难理解如果
entry.getValue()对于地图中的第一个条目,值是多少,据我所知,它可以是"type":"set" -
试试
Person person = gson.fromJson(input.readUTF(), Person.class);。见https://www.baeldung.com/gson-deserialization-guide