2016-07-24 101 views
0

讓我有一個字符串,json字符串。使用simle json解析器的java中的JSON解析錯誤

{"cond":{"to_email":"[email protected]"},"ret":"all"} 

現在我想解析它在java中使用json簡單的解析器。

我給的代碼...

try{ 
      //String s=request.getParameter("data"); 
      String s="{\"cond\":{\"to_email\":\"[email protected]\"},\"ret\":\"all\"}"; 
      JSONParser jsp=new JSONParser(); 

      if(s == null || s.equals("")){ 
       //problem 
       String json="{\"error\":\"error\",\"message\":\"no json data\"}"; 
       response.getWriter().println(json); 
      }else{    
       JSONObject obj=(JSONObject) jsp.parse(s); //only object is allowed 

       JSONObject condObj=(JSONObject) jsp.parse(""+obj.get("cond")); 
       JSONObject returnObj=(JSONObject) jsp.parse(""+obj.get("ret")); 

       System.out.println(condObj);      
      } 

現在的問題是,它給錯誤...

Unexpected character (a) at position 0. 

但如果我刪除"ret" : "all"那麼它的運作良好。

這裏在這個例子中,我只打印了condObj,但是如果我打印retObj,那麼它就是null。所以,問題是"ret" : "all"部分...

但它是一個正確的json。我檢查了它。如何擺脫這個問題?

回答

1

事情很簡單! 關鍵「cond」表示一個複雜的JSONObject,但關鍵字「ret」只是一個String。所以在這種情況下解析失敗。我不知道你正在使用哪個JSON庫,但是找一個JSONObject#getString(String key)方法來獲取值。

好運

UPDATE(與JSON的lib我使用)

 try{ 
     //String s=request.getParameter("data"); 
     String s="{\"cond\":{\"to_email\":\"[email protected]\"},\"ret\":\"all\"}"; 

     if(s == null || s.equals("")){ 
      //problem 
      String json="{\"error\":\"error\",\"message\":\"no json data\"}"; 
     }else{    
      JSONObject obj= new JSONObject(s); 

      JSONObject condObj=(JSONObject) obj.getJSONObject("cond"); 
      String returnObj= obj.getString("ret"); 

      System.out.println(condObj);  
      System.out.println(returnObj); 
     } 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

謝謝!它正在工作。 –

1

只需按照上面的答案,這裏是一個簡單的解析器。

import java.util.Set; 
import org.json.simple.JSONObject; 
import org.json.simple.parser.JSONParser; 


public class ParseJson { 

    public static void main(String[] args) throws Exception { 
     String s = "{\"cond\":{\"to_email\":\"[email protected]\"},\"ret\":\"all\"}"; 
     JSONParser jsp = new JSONParser(); 
     if (s == null || s.equals("")) { 
      String json = "{\"error\":\"error\",\"message\":\"no json data\"}"; 
     } else { 
      JSONObject obj = (JSONObject) jsp.parse(s); 
      JSONObject condObj = (JSONObject) jsp.parse("" + obj.get("cond")); 
      Set<String> keys = obj.keySet(); 

      for (String key : keys) { 
       System.out.println("Key : " + key); 
       System.out.print("Value : " +obj.get(key)); 
       System.out.println(); 
      } 
     } 
    } 
} 

這將爲您輸出鍵和值對。我們可以爲特定的鍵添加條件。 重點:滯留 值:所有 重點:COND 值:{ 「to_email」: 「[email protected]」}