将JSON数组转换为Java对象

15

我需要解析一个长这样的JSON文件:

[
  {
    "y": 148, 
    "x": 155
  }, 
  {
    "y": 135, 
    "x": 148
  }, 
  {
    "y": 148, 
    "x": 154
  }
]

我希望把这些X坐标和Y坐标放入一个JavaObject Click中,这个类看起来像这样:

public class Click {
    int x;
    int y;

    public Click(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }
}

我查看了Gson,因为他们说它相当容易,但我不明白如何从我的文件中使用它。


[] 表示数组,{} 表示对象。 - Hot Licks
3个回答

29
假设您的 JSON 字符串数据存储在名为 jsonStr 的变量中:
String jsonStr = getJsonFromSomewhere();
Gson gson = new Gson();
Click clicks[] = gson.fromJson(jsonStr, Click[].class);

2

请查看Gson API和一些示例。我在下面放了链接!

String jsonString = //your json String
Gson gson = new Gson();
Type typeOfList = new TypeToken<List<Map<String, Integer>>>() {}.getType();
List<Map<String, Integer>> list = gson.fromJson(jsonString, typeOfMap);

List<Click> clicks = new ArrayList<Click>();
for(int i = 0; i < list.size(); i++) {
    int x = list.get(i).get("x");
    int y = list.get(i).get("y");
    clicks.add(new Click(x, y));
}

这里提供了两个链接,一个是Gson的文档,另一个是MapTest.java测试代码的链接。

Gson是Google开发的用于在Java对象和JSON数据之间进行序列化和反序列化的库。它是一个开源项目并且具有广泛的应用。如果您需要将Java对象与JSON数据相互转换,则可以使用Gson来简化此过程。

MapTest.java是一个Gson库的测试代码,它主要用于测试对于Map类型(即键值对)的处理。通过仔细阅读它,您可以更好地理解Gson的使用方法以及如何在Java对象和JSON数据之间进行转换。


现在我有这个:private static final String filePath = ".\data.json"; BufferedReader br;Gson gson = new Gson(); Click click = gson.fromJson(br, Click.class); System.out.println(click);但它仍然说我的JSON文件具有错误的起始对象和结束对象。 - ProblemAnswerQue
我不确定BufferedReader在那个方法中是如何工作的。我不知道你可以这样做。这可能是你遇到错误的原因。 - haley
你卡在将JSON转换为字符串上了吗? - haley

0

另一个可靠的选择是Jackson,它似乎有一个非常不错的教程。我对它不是很熟悉,希望这可以帮到你。

主要思想是它使用了一个对象映射器。

ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(new File("c:\\user.json"), User.class);

第四步应该是您最好的选择,只需意识到您可能想要使用除User.class之外的其他内容。

编辑:

如果您非常确定要使用Gson,也许查看其他类似的答案会有所帮助。此问题是关于将JSON转换为POJO(普通旧Java对象)的,还有一些类似的问题。再次强调,我对这些不是特别熟悉,但我可以尝试回答一些问题,但我希望这能帮助您达到目标。

愉快的编码!如果您有任何问题,请留言。


是的,我知道Jackson存在,但是gson似乎更加用户友好和快速,但我就是不明白,User.class将变成Click.class,这一点我已经知道了,在gson中也是如此,就我所发现的。 - ProblemAnswerQue
为了让Jackson工作,您还需要为您的类拥有一个空构造函数。 - Kostas Kryptos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接