[英]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.