Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将特定的JSONArray转换为JAVA对象?_Java_Json_Gson - Fatal编程技术网

如何将特定的JSONArray转换为JAVA对象?

如何将特定的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, <

在Java项目中,我使用WebSocket获得订阅,我从socket获得许多不同的响应,如
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...
}