从 json 中提取字段值
我正在尝试从 json 中提取字段的值,我有一个 json 文件,其内容如下:
[ {
"autoId": "babsds",
"partNumber": 6144686,
"amount": "139.98",
"id": "1129"
},
{
"autoId": "bassb",
"partNumber": 6442686,
"amount": "139.98",
"id": "1219"
},
{
"autoId": "bsswab",
"partNumber": 6344686,
"amount": "139.98",
"id": "1291"
},
{
"autoId": "badfgb",
"partNumber": 6446856,
"amount": "139.98",
"id": "0129"
}]
为了提取 id 字段的值,我使用以下代码创建了一个 java 类:
Gson gson1 = new Gson();
Type listType = new TypeToken<ArrayList<MyObject>>(){}.getType();
List<MyObject> stats = gson1.fromJson(getJson(), listType);
for (MyObject st : stats) {
System.out.println(st.id);
}
并且还创建了一个 MyObject 类:
class MyObject {
String autoId;
String partNumber;
String amount;
String id;
@Override
public String toString() {
return "MyObject [autoId=" + autoId + ", partNumber=" + partNumber +
", amount=" + amount +
", id=" + id +
"]";
}
但我得到了这个错误 :
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:350)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
at com.google.gson.Gson.fromJson(Gson.java:888)
... 27 more
I am trying to extract a value of a field from json, I have a json file with contents like :
[ {
"autoId": "babsds",
"partNumber": 6144686,
"amount": "139.98",
"id": "1129"
},
{
"autoId": "bassb",
"partNumber": 6442686,
"amount": "139.98",
"id": "1219"
},
{
"autoId": "bsswab",
"partNumber": 6344686,
"amount": "139.98",
"id": "1291"
},
{
"autoId": "badfgb",
"partNumber": 6446856,
"amount": "139.98",
"id": "0129"
}]
To extract the value of id field, I created a java class with this code :
Gson gson1 = new Gson();
Type listType = new TypeToken<ArrayList<MyObject>>(){}.getType();
List<MyObject> stats = gson1.fromJson(getJson(), listType);
for (MyObject st : stats) {
System.out.println(st.id);
}
and also created a MyObject class :
class MyObject {
String autoId;
String partNumber;
String amount;
String id;
@Override
public String toString() {
return "MyObject [autoId=" + autoId + ", partNumber=" + partNumber +
", amount=" + amount +
", id=" + id +
"]";
}
But I get this error :
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:350)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
at com.google.gson.Gson.fromJson(Gson.java:888)
... 27 more
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是一个好的 JSON 格式化程序 真正可以提供帮助的地方。
无效,因为它应该以单个“外部”对象或数组开头
而且...
无效,因为数组需要一个键,即
{"some array":[...]}
所以,我修改了你的 JSON 看起来像...
并使用...
来解析它并打印...
This is where a good JSON formatter can really help.
Is invalid, as it should either start with a single "outer" object or array
And...
is invalid as the array needs a key ie
{"some array":[...]}
So, I modified your JSON to look like...
and used...
to parse it and it prints...