使用simle json解析器的java中的JSON解析错误

问题描述:

让我有一个字符串,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。我检查了它。如何摆脱这个问题?

事情很简单! 关键“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

谢谢!它正在工作。 –

只需按照上面的答案,这里是一个简单的解析器。

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]”}