gpt4 book ai didi

java - JSON - 将 JSON 字符串放入 JSON 对象时出错

转载 作者:行者123 更新时间:2023-11-30 06:49:42 24 4
gpt4 key购买 nike

我有一个 Java 网络服务和 Jersey 来创建和编辑市场价格。为此,我发送了一个包含市场信息的 JSON 对象,包括另一个用于表示价格的 JSON 对象。

例如,这是我通过 Postman 发布的 JSON:

{
"name": "Market 01",
"address": "Market 01 street",
"prices": "{\"watermelon\": \"5.40\", \"melon\": \"2.55\"}"
}

在网络服务器端,我尝试使用 GSON 创建价格列表,但我无法让它工作。我的目的是检查新价格和当前价格之间的差异。下面是我的 POJO Price.java,我试图在 Controller 上做的编辑和我在 Postman 上遇到的异常:

POJO - Price.java

public class Price {
private String nome;
private Double preco;
//Getters and setters also
}

市场 Controller .java

Collection<Price> prices = gson.fromJson(json, new TypeToken<List<Price>>(){}.getType());

MarketController.java 引发的异常:

java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

编辑:基于@A2H 回复对我有用的解决方案:

POJO 类 - Price.java

public class Price {
private String name;
private Double price;

...

@Override
public String toString() {
return "{\"name\":\"" + name + "\", \"price\":" + price + "}";
}
}

POJO 类 - Market.java

public class Market{
...
//Include as a List<Price>
private List<Price> prices;
...
}

市场 Controller .java

// When going from List<Price> to JSON String
String prices = gson.toJson(market.getPrices());
// When going from JSON String to List<Price>
List<Price> prices = gson.fromJson(jsonString, new TypeToken<List<Price>>(){}.getType());

这段代码非常适合这种情况,您需要从 List 转换为 JSON String,反之亦然。

最佳答案

您的 POJO 意味着您的 JSON 对象中应该有一组价格。

这是一个完整的工作示例。

package test;

import java.util.List;

import com.google.gson.Gson;

public class TESTTEST {

public class MarketInfo {
String name;
String address;
List<Price> prices;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

public List<Price> getPrices() {
return prices;
}

public void setPrices(List<Price> prices) {
this.prices = prices;
}
}

public class Price {
String nome;
Double preco;

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

public Double getPreco() {
return preco;
}

public void setPreco(Double preco) {
this.preco = preco;
}

@Override
public String toString() {
return "{\"nome\":\"" + nome + "\", \"preco\":" + preco + "}";
}
}

public static void main(String[] args) {
Gson gson = new Gson();
String jsonString = "{\"name\": \"Market 01\",\"address\": \"Market 01 street\","
+ "\"prices\": [{\"nome\":\"watermelon\",\"preco\":\"5.40\"}, {\"nome\":\"melon\",\"preco\": \"2.55\"}]}";
MarketInfo res = gson.fromJson(jsonString, MarketInfo.class);
System.out.println(res.getPrices());
}
}

关于java - JSON - 将 JSON 字符串放入 JSON 对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42399371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com