2013-11-23 3 views
1

У меня есть следующие строки, которые не могут быть преобразованы в Java картуне может преобразовать JSon отформатированной строки к карте Java

{ 
    "msg_id" : "6b0af820-6bf8-4bc8-823e-a8f7435b69da", 
    "msg_body" : "path from chongqing to shanghai", 
    "outcome" : { 
    "intent" : "route_", 
    "entities" : { 
     "location" : { 
     "end" : 19, 
     "start" : 10, 
     "value" : "chongqing", 
     "body" : "chongqing", 
     "suggested" : true 
     }, 
     "destination" : { 
     "end" : 31, 
     "start" : 23, 
     "value" : "shanghai", 
     "body" : "shanghai", 
     "suggested" : true 
     } 
    }, 
    "confidence" : 0.682 
    } 
} 

Мой код, где jsonstr является строка выше

JSONObject jas= new JSONObject(jsonstr); //This is where Exception thrown 

Единственного трюк может что значение jsonstr получено из класса сообщений android.

import android.os.Message; 
    import android.os.Messenger; 
    import org.json.JSONObject; 

в передающей стороне:

Message messageToClient = Message.obtain(null, 0, theoriginalstrcontainingjson); 
client.send(messageToClient); 

в принимающей стороне:

void handleMessage(Message msg){ 
      jsonstr = msg.obj.toString(); 
     JSONObject jas= new JSONObject(jsonstr); (exception happens) 

Исключение:

11-24 07:45:15.473: W/System.err(12674): org.json.JSONException: Value get of type java.lang.String cannot be converted to JSONObject 
11-24 07:45:15.473: W/System.err(12674): at org.json.JSON.typeMismatch(JSON.java:111) 
11-24 07:45:15.473: W/System.err(12674): at org.json.JSONObject.<init>(JSONObject.java:158) 
11-24 07:45:15.473: W/System.err(12674): at org.json.JSONObject.<init>(JSONObject.java:171) 

Я заподозрить передачи строки может губит свой формат. Является ли это возможным?

ответ

1

JSON действительно. Я протестировал ваше дело, и это сработало. Mayby Ваша кодировка кодируется, когда вы генерируете строку «theoriginalstrcontainingjson» перед отправкой сообщения?

Мой тестовый код (в папке с ресурсами я включил ваш json как «test.json»): package com.fada21.switchplayground;

import java.io.BufferedReader;                     
import java.io.IOException;                     
import java.io.InputStream;                     
import java.io.InputStreamReader;                    

import org.json.JSONException;                     
import org.json.JSONObject;                     

import android.app.Activity;                     
import android.os.Bundle;                      
import android.os.Handler;                      
import android.os.Message;                      
import android.os.Messenger;                     
import android.os.RemoteException;                    
import android.util.Log;                      
import android.view.Menu;                      

public class MainActivity extends Activity {                 

    @Override                         
    protected void onCreate(Bundle savedInstanceState) {              
     super.onCreate(savedInstanceState);                 
     setContentView(R.layout.activity_main);                

     Handler handler = new Handler() {                  

      @Override                       
      public void handleMessage(Message msg) {               
       Log.d("", msg.obj.toString());                 
       try {                       
        new JSONObject(msg.obj.toString());              
        Log.d("", "Success!");                  
       } catch (JSONException e) {                 
        Log.d("", "Fail!", e);                  
       }                        
      }                         
     };                          

     String s = decodeJsonAsset();                   
     Message message = Message.obtain(null, 0, s);               
     Messenger client = new Messenger(handler);                

     try {                         
      client.send(message);                    
     } catch (RemoteException e) {                   
      e.printStackTrace();                    
     }                          

    }                           

    private String decodeJsonAsset() {                   
     try {                         
      InputStream is = getResources().getAssets().open("test.json");          
      BufferedReader reader = new BufferedReader(new InputStreamReader(is));        
      StringBuilder sb = new StringBuilder();               
      String s;                       
      while ((s = reader.readLine()) != null) {               
       sb.append(s);                     
      }                         
      is.close();                      
      return sb.toString();                    
     } catch (IOException e) {                    
      e.printStackTrace();                    
     }                          
     return null;                       
    }                           

    @Override                         
    public boolean onCreateOptionsMenu(Menu menu) {               
     // Inflate the menu; this adds items to the action bar if it is present.        
     getMenuInflater().inflate(R.menu.main, menu);               
     return true;                       
    }                           

}                            
+0

Передача произошла между двумя действиями, если это имеет значение вообще. Я тестировал в отправляющей активности, и это сработало, но в принимающем, это не – Daniel

Смежные вопросы