簡體   English   中英

使用json-simple將多個JSON字符串解析為對象

[英]Parsing Multiple JSON Strings to Objects using json-simple

我有一個正在運行的套接字服務器,它將為客戶端發出json字符串。 我試圖使用json-simple進行解析。 但是,我面臨的問題是,服務器沒有任何分隔符來分隔json字符串。 因此,我的JSON簡單JSONParser引發了ParseException。

另外,我嘗試使用json-smart。 但是,在這種情況下,JSONParser僅返回第一個對象,而忽略字符串的其余部分。

我是這個json解析新手。 如果人們可以指導我采取正確的方式處理json字符串流,那就太好了。

編輯:-添加JSON字符串和示例代碼

{"type":"response","id":"1","result":[true,0]}{"type":"response","id":"2","result":[true,1]}

當前,當我使用json-smart時,此方法返回單個對象;使用json-simple時,此方法返回null。

public JSONObject getResponse(JSONObject request) {
    String s = null;
    Socket soc = null;
    PrintWriter sout = null;
    BufferedReader sin = null;
    try {
        soc = new Socket(InetAddress.getByName("127.0.0.1"), 9090);
        sout = new PrintWriter(soc.getOutputStream());
        sin = new BufferedReader(
                new InputStreamReader(soc.getInputStream()));
        sout.println(request.toJSONString());
        sout.flush();
        s = sin.readLine();
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    } finally {
        try {
            sin.close();
            sout.close();
            soc.close();
        } catch (Exception e) {
        }
    }
    Object response = null;
    try {
        response = JSONValue.parseWithException(s.toString());
    }catch (ParseException e){
        e.printStackTrace();
    }
    return (JSONObject) response;

提前致謝,

卡哈

我找到了使用Jackson的解決方案。 這是對我有用的代碼。

MappingJsonFactory factory = new MappingJsonFactory();
JsonParser parser = factory.createParser(soc.getInputStream());
JsonToken curToken = parser.nextToken();
if (curToken != JsonToken.START_OBJECT) {
    System.err.println("Not in start object!, Exiting...");
    return null;
}
while (runParser.get() == true) {
    if (curToken == JsonToken.START_OBJECT) {
        TreeNode node = parser.readValueAsTree();
        System.out.println(node.getClass().getName());
        System.out.println(node);
    }
    curToken = parser.nextToken();
}

感謝Kaja Mohideen! 它在while循環中進行了很小的更改。 此代碼完美地工作。 在我的情況下,輸入json在文件中。 使用的庫:傑克遜核心,傑克遜注釋和傑克遜數據綁定

    MappingJsonFactory factory = new MappingJsonFactory();
    JsonParser parser = null;
    File file = new File("jsontest.txt");
    try {

        parser = factory.createParser(file);
        JsonToken curToken = parser.nextToken();
        if (curToken != JsonToken.START_OBJECT) {
            System.err.println("Not in start object!, Exiting...");

        }
        while (parser.hasCurrentToken()) {
            if (curToken == JsonToken.START_OBJECT) {
                TreeNode node = parser.readValueAsTree();
                System.out.println(node);
            }
            curToken = parser.nextToken();
        }
    } catch (JsonParseException e) {
        e.printStackTrace();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM