如何将特定的JSONArray转换为JAVA对象?
在Java项目中,我使用WebSocket获得订阅,我从socket获得许多不同的响应,如如何将特定的JSONArray转换为JAVA对象?,java,json,gson,Java,Json,Gson,在Java项目中,我使用WebSocket获得订阅,我从socket获得许多不同的响应,如JSONArray,我需要的响应如下所示: [ 68, "te", [ 80588348, 1508768162000, 0.01569882, 5700.8 ] ] 对于此响应,应该如何查看JAVA对象? 如何将其转换为此对象 [ 68, <- Integer "te", <- String [ 80588348, <
JSONArray
,我需要的响应如下所示:
[
68,
"te",
[
80588348,
1508768162000,
0.01569882,
5700.8
]
]
对于此响应,应该如何查看JAVA
对象?
如何将其转换为此对象
[
68, <- Integer
"te", <- String
[
80588348, <- Long
1508768162000, <- Long
0.01569882, <- Double
5700.8 <- Double
]
]
当我尝试通过new JSONArray(response)
转换它时,它抛出org.json.JSONException:JSONArray文本必须在1[字符2第1行]以“[”开头。
如何获取和转换我需要的字段(第一个响应示例)
我想得到这样的东西:
public class Details{
public Long id;
public Long timestamp;
public Double amount;
public Double price;
}
public class Response{
public Integer id;
public String type;
public Details details;
}
如果您的答复是固定格式的 例如:
JSONString : {"color":"yellow","type":"renault"}
在Java中,可以使用以下代码:
Car car = objectMapper.readValue(jsonString, Car.class);
您的汽车等级为:
public class Car {
private String color;
private String type;
// standard getters setters
}
请求的解析器类:
public class JsonParser {
public static Response toJavaObject(String str) {
String[] fields = str.split(",");
Response res = new Response();
res.setId(Integer.valueOf(fields[0].substring(1)));
res.setType(fields[1].replaceAll("\"", ""));
Details dtl = new Details();
dtl.setId(Long.valueOf(fields[2].substring(1)));
dtl.setTimestamp(Long.valueOf(fields[3]));
dtl.setAmount(Double.valueOf(fields[4]));
dtl.setPrice(Double.valueOf(fields[5].substring(0, fields[5].length() - 2)));
res.setDetails(dtl);
return res;
}
}
class Details {
public Long id;
public Long timestamp;
public Double amount;
public Double price;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getTimestamp() {
return timestamp;
}
public void setTimestamp(Long timestamp) {
this.timestamp = timestamp;
}
public Double getAmount() {
return amount;
}
public void setAmount(Double amount) {
this.amount = amount;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
}
class Response {
public Integer id;
public String type;
public Details details;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Details getDetails() {
return details;
}
public void setDetails(Details details) {
this.details = details;
}
}
要使用此JsonParser
例如,在您的代码中:
public static void main(String args[]) {
String str = "[68,\"te\",[80588348,1508768162000,0.01569882,5700.8]]";
Response res = JsonParser.toJavaObject(str);
// your logic below...
}
您使用的是框架吗?这不是一个对象,只是一个列表,即在Java中,外部列表和内部列表可能都是
列表
或数组对象[]
。我收到字符串
,并尝试通过新JSONArray(responseString)转换它
。它返回了我的JSONArray,但我想得到java对象,它应该包含整数、字符串和第二个对象,里面有4个字段。如果您的响应是固定格式的,我建议您使用objectmapper将其传输到java对象directly@ACz给你一个简单的例子,如果你有一个响应数组,你可以把它读成lis它不是JSONArray,而是以“[”开头的标准JSONObject,这是一个数组结构。你有一个数组结构的json对象,这在当今是不常见的。我想最好的方法是用这种格式自己实现一个json解析器。我做了一些研究,看到:@ACz gson,jackson,json,都提供了对JSONObject的解析,但不是你那种JSONObject的解析。如果你有这样的输入,那就不是了写你自己的解析器并不太难,给我3~5minsAww,好吧,所以只有手动设置字段的方法是可能的?没有最简单的方法?来吧,兄弟,你能创建一个JsonParser.java,复制上面的内容,并在需要时调用它吗?最后一个问题,如何区分哪个对象来了?正如我告诉我的,我从相同的源代码[68,“te”,“805883481508768162000,0.015698825700.8]
和{“事件”:“订阅”,“频道”:“交易”,“chanId”:68,“符号”:“tBTCUSD”,“配对”:“BTCUSD”}
但我只需要添加第一个字符,请复制一个java类,导入并直接使用它,它不是线程安全的,但不管怎样。@ACz您可以通过读取第一个字符来区分不同,如果它是“[”,那么使用,如果它是“{”,忽略
public static void main(String args[]) {
String str = "[68,\"te\",[80588348,1508768162000,0.01569882,5700.8]]";
Response res = JsonParser.toJavaObject(str);
// your logic below...
}