2016-07-24 15 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"です。この場合、解析は失敗します。どのJSON-libaryを使用しているのかわかりませんが、値を取得するにはJSONObject#getString(String key)メソッドを探してください。

幸運ただ、上記の解答を、以下の(私が使用してJSON libに付き)

UPDATE

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

これは、キーと値のペアの両方を表示します。特定のキーに対して条件を追加できます。 キー:RET 値:すべての キー:指揮 値:{ "to_email": "[email protected]"}