Java读取JSON输入流

时间:2014-10-09 17:24:57

标签: java json tcp inputstream

我正在用Java编写一个简单的TCP服务器,它正在侦听某个端口上的某些URL。某些客户端(不是Java)向服务器发送JSON消息,类似于{'message':'hello world!', 'test':555}。我接受该消息尝试获取JSON(我正在考虑使用GSON库)。

Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();

但是如何从输入流中获取消息?我尝试使用ObjectInputStream,但据我所知,它等待序列化数据而JSON没有序列化。

2 个答案:

答案 0 :(得分:7)

BufferedReader换行并开始从中读取数据:

BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String content = br.readLine();
System.out.println(content);

然后使用像Gson或Jackson这样的库解析你的JSON字符串。

答案 1 :(得分:1)

        StringBuffer buffer = new StringBuffer();
        int ch;
        boolean run = true;
        try {
            while(run) {
                ch = reader.read();
                if(ch == -1) { break; }
                buffer.append((char) ch);
                if(isJSONValid(buffer.toString())){ run = false;}
            }
        } catch (SocketTimeoutException e) {
            //handle exception
        }



private boolean isJSONValid(String test) {
        try {
            new JSONObject(test);
        } catch (JSONException ex) {
            try {
                new JSONArray(test);
            } catch (JSONException ex1) {
                return false;
            }
        }

        return true;
    }