我在android上做一个客户端接受http返回数据。得到一个String 类型 mess,由JSONobject.toString 拿到的。 导入java json常用包(6个)后
android中的解析代码如下:
String mess = "{"loginuser":[{"password":"123","person":{"address":"4654","id":1,"name":"ttjxffda","phone":"1212"},"status":0,"username":"ttjxtjx"}],"loginresult":"success"}";
JSONObject jsonObject = JSONObject.fromObject(mess);
String state = (String) jsonObject.get("loginresult");
if (state.equals("success")) {
JSONArray jsonArray = jsonObject.getJSONArray("loginuser");
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject item = jsonArray.getJSONObject(i);
Libuser user = new Libuser();
user.setUsername(item.getString("username"));
user.setPassword(item.getString("password"));
user.setStatus(item.getInt("status"));
} }
在android单元测试时报异常 java.lang.IllegalArgumentException: already added: Lorg/apache/commons/collections/ArrayStack; 项目出错无法测试在java项目中测试通过。我知道这是因为引入了重复包,我删了commons-collections.jar (3.2)这个包,结果报找不到类异常:
case by:NoClassDefFoundError org.apache.commons.map.listOrderedMap。没法解决。纠结。求高人指点我有常识过用android自带的json类,但是它解析不了mess字符串,
org.json.JSONException: Expected ':' after &quot at character 7 of {&quot;loginuser&quot;:[{&quot;password&quot;:&quot;123&quot;,&quot;person&quot;:{&quot;address&quot;:&quot;4654&quot;,&quot;id&quot;:1,&quot;name&quot;:&quot;ttjxffda&quot;,&quot;phone&quot;:&quot;1212&quot;},&quot;status&quot;:0,&quot;username&quot;:&quot;ttjxtjx&quot;}],&quot;loginresult&quot;:&quot;success&quot;}
at org.json.JSONTokener.syntaxError(JSONTokener.java:446)
at org.json.JSONTokener.readObject(JSONTokener.java:375)
at org.json.JSONTokener.nextValue(JSONTokener.java:96)
at org.json.JSONObject.<init>(JSONObject.java:154)
at org.json.JSONObject.<init>(JSONObject.java:171)
at cec.jmu.test.LoginTest.getLoginstate(LoginTest.java:38)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:520)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)mess内容代码中有。outprint结果:{"loginuser":[{"password":"123","person":{"address":"4654","id":1,"name":"ttjxffda","phone":"1212"},"status":0,"username":"ttjxtjx"}],"loginresult":"success"}生成mess的代码,Libuser中有个Person对象。
                   
Libuser loginuser=LibuserService.getLoginUser(user);
System.out.println(loginuser.toString());
JSONObject jsonObject = new JSONObject();
JSONObject item = new JSONObject();
JSONArray jsonArray = new JSONArray();
item.put("username", loginuser.getUsername());
item.put("password", loginuser.getPassword());
item.put("status", loginuser.getStatus());
jsonArray.element(loginuser);
jsonObject.put("loginuser", jsonArray);
jsonObject.put("loginresult", loginresult);
this.message=jsonObject.toString();
System.out.println(message);自己查了好久没办法解决。纠结啊,求高人指点。

解决方案 »

  1.   

    代码说明一切
    public void json(){
    String str = "{\"loginuser\":[{\"password\":\"123\",\"person\":{\"address\":\"4654\",\"id\":1,\"name\":\"ttjxffda\",\"phone\":\"1212\"},\"status\":0,\"username\":\"ttjxtjx\"}],\"loginresult\":\"success\"}";
    try {
    JSONObject jsonObject = new JSONObject(str);
    String loginresult = jsonObject.getString("loginresult");
    System.out.println(loginresult);
    if (loginresult.equals("success")) {
    JSONArray jsonArray = jsonObject.getJSONArray("loginuser");
    JSONObject jsonObjectData = (JSONObject) jsonArray.opt(0);
    String password = jsonObjectData.getString("password");
    String status = jsonObjectData.getString("status");
    String username = jsonObjectData.getString("username");
    System.out.println(password);
    System.out.println(status);
    System.out.println(username);
    JSONObject jsonObjectPerson = jsonObjectData.getJSONObject("person");
    String address = jsonObjectPerson.getString("address");
    String id = jsonObjectPerson.getString("id");
    String name = jsonObjectPerson.getString("name");
    String phone = jsonObjectPerson.getString("phone");
    System.out.println(address);
    System.out.println(id);
    System.out.println(name);
    System.out.println(phone);
    }
    } catch (Exception e) {
    // TODO: handle exception
    }
    }
    03-23 14:29:02.946: I/System.out(22411): success
    03-23 14:29:02.946: I/System.out(22411): 123
    03-23 14:29:02.946: I/System.out(22411): 0
    03-23 14:29:02.946: I/System.out(22411): ttjxtjx
    03-23 14:29:02.946: I/System.out(22411): 4654
    03-23 14:29:02.946: I/System.out(22411): 1
    03-23 14:29:02.946: I/System.out(22411): ttjxffda
    03-23 14:29:02.946: I/System.out(22411): 1212
    03-23 14:29:02.946: I/System.out(22411): onResume
      

  2.   

    import org.json.JSONArray;
    import org.json.JSONObject;public void json(){
    String str = "{\"loginuser\":[{\"password\":\"123\",\"person\":{\"address\":\"4654\",\"id\":1,\"name\":\"ttjxffda\",\"phone\":\"1212\"},\"status\":0,\"username\":\"ttjxtjx\"}],\"loginresult\":\"success\"}";
    try {
    JSONObject jsonObject = new JSONObject(str);
    String loginresult = jsonObject.getString("loginresult");
    System.out.println(loginresult);
    if (loginresult.equals("success")) {
    JSONArray jsonArray = jsonObject.getJSONArray("loginuser");
    JSONObject jsonObjectData = (JSONObject) jsonArray.opt(0);
    String password = jsonObjectData.getString("password");
    String status = jsonObjectData.getString("status");
    String username = jsonObjectData.getString("username");
    System.out.println(password);
    System.out.println(status);
    System.out.println(username);
    JSONObject jsonObjectPerson = jsonObjectData.getJSONObject("person");
    String address = jsonObjectPerson.getString("address");
    String id = jsonObjectPerson.getString("id");
    String name = jsonObjectPerson.getString("name");
    String phone = jsonObjectPerson.getString("phone");
    System.out.println(address);
    System.out.println(id);
    System.out.println(name);
    System.out.println(phone);
    }
    } catch (Exception e) {
    // TODO: handle exception
    }
    }
      

  3.   

    解决了谢谢、、、  我通过网页拿到的String mess里数据的双引号全是用转义符表示的所以new jsonobject的时候报错。   汗.   麻烦你了 
      

  4.   

    用android自带的json包就行了。。  不过android2.2和java json包冲突 没找到解决办法