使用jsonsimple将多个JSON字符串解析为对象



我有一个正在运行的套接字服务器,它将为客户端发出json字符串。我试着使用json simple来解析它们。但是,我面临的问题是,服务器没有任何分隔符来分隔json字符串。因此,我的json简单JSONParser抛出ParseException。

作为替代方案,我尝试使用json智能。但是,在这种情况下,JSONParser只返回第一个对象,而忽略字符串的其余部分。

我对json解析还不熟悉。如果人们能指导我正确处理json字符串流的方法,那就太好了。

编辑:-添加JSON字符串和示例代码

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

目前,当我使用json-smart时,该方法返回单个对象,当使用json-ssimple时,返回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;

提前感谢

Kaja

我找到了一个使用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在文件中。使用的库:jackson核心、jackson注释和jackson数据绑定

    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();
    }

相关内容

  • 没有找到相关文章

最新更新