Reputation: 577
In Java project I used WebSocket to get subscription and I get many different responses from socket as JSONArray
, the one which I need looks as below:
[
68,
"te",
[
80588348,
1508768162000,
0.01569882,
5700.8
]
]
How should look JAVA
object for this response?
How can I convert it to this object?
[
68, <- Integer
"te", <- String
[
80588348, <- Long
1508768162000, <- Long
0.01569882, <- Double
5700.8 <- Double
]
]
There is one problem that there are other responses like:
{"event":"subscribed","channel":"trades","chanId":68,"symbol":"tBTCUSD","pair":"BTCUSD"}
And when I try convert it by new JSONArray(response)
it throws org.json.JSONException: A JSONArray text must start with '[' at 1 [character 2 line 1].
How to get and convert this fields which I need(the first response example) ?
I want get something like this:
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;
}
Upvotes: 2
Views: 5201
Reputation: 1008
The parser class as requested:
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;
}
}
To make use of this JsonParser,
for example in your code now:
public static void main(String args[]) {
String str = "[68,\"te\",[80588348,1508768162000,0.01569882,5700.8]]";
Response res = JsonParser.toJavaObject(str);
// your logic below...
}
Upvotes: 2
Reputation: 1008
If your response is in fixed format,
example:
JSONString : {"color":"yellow","type":"renault"}
In Java, you can use the following code:
Car car = objectMapper.readValue(jsonString, Car.class);
Where you have the Car class as:
public class Car {
private String color;
private String type;
// standard getters setters
}
Upvotes: 1