从 json 中提取字段值

发布于 2025-01-19 20:01:26 字数 1736 浏览 1 评论 0原文

我正在尝试从 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

惟欲睡 2025-01-26 20:01:26

这是一个好的 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"
}

无效,因为它应该以单个“外部”对象或数组开头

而且...

{
    [
        {
            "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"
        }
    ]
}

无效,因为数组需要一个键,即 {"some array":[...]}

所以,我修改了你的 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"
    }
]

并使用...

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        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);
        }
    }

    protected static String getJson() {
        return """
            [
                {
                    "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"
                }
            ]
               """;
    }

    public static class MyObject {
        String autoId;
        String partNumber;
        String amount;
        String id;

        @Override
        public String toString() {
            return "MyObject [autoId=" + autoId + ", partNumber=" + partNumber
                    + ", amount=" + amount
                    + ", id=" + id
                    + "]";
        }
    }
}

来解析它并打印...

1129
1219
1291
0129

This is where a good JSON formatter can really help.

{
    "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"
}

Is invalid, as it should either start with a single "outer" object or array

And...

{
    [
        {
            "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"
        }
    ]
}

is invalid as the array needs a key ie {"some array":[...]}

So, I modified your JSON to look 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"
    }
]

and used...

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        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);
        }
    }

    protected static String getJson() {
        return """
            [
                {
                    "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"
                }
            ]
               """;
    }

    public static class MyObject {
        String autoId;
        String partNumber;
        String amount;
        String id;

        @Override
        public String toString() {
            return "MyObject [autoId=" + autoId + ", partNumber=" + partNumber
                    + ", amount=" + amount
                    + ", id=" + id
                    + "]";
        }
    }
}

to parse it and it prints...

1129
1219
1291
0129
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文