【发布时间】:2021-12-31 16:48:06
【问题描述】:
我在 Spring Boot 应用程序中从 pandas 收到以下格式的 JSON:
{\"Ticker\":{\"0\":\"GGB\",\"1\":\"CRD-B\",\"2\":\"QIWI\",\"3\":\"VIPS\",\"4\":\"PRDO\",\"5\":\"VALE\",\"6\":\"TCS\",\"7\":\"LL\",\"8\":\"ETD\",\"9\":\"PRIM\",\"10\":\"SNDR\",\"11\":\"MDU\",\"12\":\"CMC\",\"13\":\"TX\",\"14\":\"FOXA\",\"15\":\"EBS\",\"16\":\"SAGE\"},\"Price\":{\"0\":4.38,\"1\":7.93,\"2\":8.3,\"3\":10.04,\"4\":10.54,\"5\":11.45,\"6\":12.82,\"7\":17.23,\"8\":24.06,\"9\":25.14,\"10\":25.76,\"11\":28.47,\"12\":35.07,\"13\":38.02,\"14\":38.99,\"15\":40.07,\"16\":40.9},\"total_multiplier\":{\"0\":1,\"1\":1,\"2\":1,\"3\":1,\"4\":2,\"5\":2,\"6\":1,\"7\":1,\"8\":2,\"9\":2,\"10\":2,\"11\":2,\"12\":1,\"13\":1,\"14\":2,\"15\":2,\"16\":2}}
然后我尝试从该字符串中获取数据,但是以下
String tickersList =
Objects.requireNonNull(fastAPIService.localApiClient().get().uri("/finmine/").retrieve().bodyToMono(String.class).block());
tickersList = tickersList.substring(1, tickersList.length() - 1);
JSONObject tickersObject = new JSONObject(tickersList);
JSONArray tickersArray = new JSONArray(tickersObject);
final int n = tickersArray.length();
for (int i = 0; i < n; ++i) {
final JSONObject ticker = tickersArray.getJSONObject(i);
System.out.println(ticker.getString("Ticker"));
System.out.println(ticker.getFloat("total_multiplier"));
}
投掷
org.json.JSONException: 缺少值 1 [字符 2 第 1 行]
我从字符串中减去 ",因为 fastapi 客户端将它作为字符串发送给我;我尝试在字符串的开头和结尾添加方括号,但随后它会抛出一个错误,即字符处缺少值 ":" 654
如果我想稍后用它创建以下类的对象,我应该如何以正确的方式读取该 JSON?
public class Ticker {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String Ticker;
private Double Price;
private Double total_multiplier;
}
【问题讨论】:
-
那些转义字符会弄乱你的字符串。
-
首先,JSON 字符串无效(但您可以通过将反斜杠字符替换为空字符串使其有效)。其次,JSON 字符串不包含任何 JSON 数组。
-
另外,Price、Ticker 和 total_multipliers 必须是带有名称从 0 到 16 的字符串变量的 java 对象。
-
我怀疑这个错误实际上是你自己的代码在抑制 JSON。你的第一行是做什么的。您应该做什么而不是直接编组到
String或Ticker或Map而不是编组到字符串。恕我直言,您正在解决一个不存在但您自己创造的问题。
标签: java json spring spring-boot