英文:
JSON Response Body of type array to Java Object
问题
我正在将类型为数组的 JSON 响应转换为 Java Object 类,但在进行反序列化时出现错误:
> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:200)
JSON 响应
[
{
"name": "Apple iPhone X",
"price": 700,
"rating": 4,
"id": 1
},
{
"name": "Apple Mac Mini",
"price": 900,
"rating": 5,
"id": 2
},
{
"name": "HTC Chacha",
"price": 200,
"rating": 3,
"id": 4
},
{
"name": "Sony Xperia",
"price": 600,
"rating": 5,
"id": 5
},
{
"name": "Samsung Galaxy",
"price": 400,
"rating": 2,
"id": 6
},
{
"name": "LG LED 5600VW",
"price": 550,
"rating": 1,
"id": 7
},
{
"name": "Moto Razor",
"price": 65000,
"rating": 4,
"id": 9
}
]
Phones.java(Object 类模型)
package apiEngine.model.responses;
public class Phones {
public String name;
public Integer price;
public Integer rating;
public Integer id;
public Phones() {
}
public Phones(String name, Integer price, Integer rating, Integer id) {
super();
this.name = name;
this.price = price;
this.rating = rating;
this.id = id;
}
}
转换方法,将 JSON 响应转换为 Java 对象
private static Phones phoneResponse;
public void displaylist() {
RequestSpecification request = RestAssured.given();
request.header("Content-Type", "application/json").header("x-access-token", token);
response = request.get("/products");
phoneResponse = response.getBody().as(Phones.class);
jsonString = response.asString();
//System.out.println("list of phone is displayed \n" + phoneResponse);
}
英文:
I am converting JSON response of type array into java Object class, but while doing deserialization i am getting error as
> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:200)
JSON Response
[
{
"name": "Apple iPhone X",
"price": 700,
"rating": 4,
"id": 1
},
{
"name": "Apple Mac Mini",
"price": 900,
"rating": 5,
"id": 2
},
{
"name": "HTC Chacha",
"price": 200,
"rating": 3,
"id": 4
},
{
"name": "Sony Xperia",
"price": 600,
"rating": 5,
"id": 5
},
{
"name": "Samsung Galaxy",
"price": 400,
"rating": 2,
"id": 6
},
{
"name": "LG LED 5600VW",
"price": 550,
"rating": 1,
"id": 7
},
{
"name": "Moto Razor",
"price": 65000,
"rating": 4,
"id": 9
}
]
Phones.Java (Object class model)
package apiEngine.model.responses;
public class Phones {
public String name;
public Integer price;
public Integer rating;
public Integer id;
public Phones() {
}
public Phones(String name, Integer price, Integer rating, Integer id) {
super();
this.name = name;
this.price = price;
this.rating = rating;
this.id = id;
}
}
Converting Method where JSON response is being converted into Java object
private static Phones phoneResponse;
public void displaylist() {
RequestSpecification request = RestAssured.given();
request.header("Content-Type", "application/json").header("x-access-token", token);
response = request.get("/products");
phoneResponse = response.getBody().as(Phones.class);
jsonString = response.asString();
//System.out.println("list of phone is displayed \n" + phoneResponse);
}
答案1
得分: 3
你正在尝试将一个 JSON
数组转换为对象。可以尝试以下方法:
final Phone[] phoneResponses = new Gson().fromJson(jsonString, Phone[].class);
此外,我建议您将 Phones
类的名称重构为 Phone
,因为它表示单个手机。
英文:
You are trying to convert a JSON
array to an object. Try something like;
final Phones[] phoneResponses = new Gson().fromJson(jsonString, Phones[].class);
Further, I would suggest you refactor the name of your Phones
class to Phone
because it represents a single phone.
答案2
得分: 1
你正在尝试将JSON array
作为object
获取 - 你需要将它作为数组获取,不确定对于GSON
是否有效,但通常类似于:
phoneResponse = response.getBody().as(Phones[].class);
应该可以工作。
其中phoneResponse
必须是Phone
类的数组。因此,名称phones
可能更合适。
英文:
You are trying to get a JSON array
as object
- you need to get it as array, not sure if it works for GSON
, but usually stuff like:
phoneResponse = response.getBody().as(Phones[].class);
should work.
Where phoneResponse
has to be an array of the Phone
class. Therefore the name phones
"would be probably more suiting.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论