无效的JSON对象中的Andr​​oid [英] invalid Json Object in Android

查看:130
本文介绍了无效的JSON对象中的Andr​​oid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以帮助我,为什么我的JSON是无效的,即使我使用JSON Editor在线检查和它说我的JSON是有效的吗?
这是我的JSON响应:

 八月八日至31日:02:43.921:W / System.err的(4767):org.json.JSONException:值{\"ContactID\":5,\"AdminUnitID\":0,\"UserRoleID\":0,\"SecretQuestionID\":0,\"FirstName\":\"nhan2\",\"LastName\":\"nguyen2\",\"Title\":\"student\",\"Email\":\"nhan@mail.com\",\"ProfileURL\":\"test\",\"InactiveDate\":\"\\/Date(-62135568000000)\\/\",\"UserName\":null,\"Password\":null,\"SecretAnswer\":null,\"RegisterDate\":\"\\/Date(-62135568000000)\\/\",\"LastLogin\":\"\\/Date(-62135568000000)\\/\"}型的java.lang.String中不能转换到的JSONObject

下面是我的code:

  LoginContact接触= NULL;
    @覆盖
    保护LoginContact doInBackground(字符串... PARAMS){
        JSONObject的jObject = NULL;
        尝试
        {
            DefaultHttpClient客户端=新DefaultHttpClient();
            HTTPGET请求=新HTTPGET(PARAMS [0]);
            request.setHeader(接受,应用/ JSON);
            request.setHeader(内容类型,应用/ JSON的;字符集= UTF-8);
            HTT presponse响应= client.execute(请求);
            HttpEntity实体= response.getEntity();
            InputStream的时间= entity.getContent();
            InputStreamReader的读者=新InputStreamReader的(在UTF-8);
            尝试
            {
                BR的BufferedReader =新的BufferedReader(读者);
                StringBuilder的SB =新的StringBuilder();
                串线= NULL;
                而((行= br.readLine())!= NULL)
                {
                    sb.append(行+\\ n);
                }
                附寄();
                字符串结果= sb.toString();
                jObject =新的JSONObject(结果);
                接触=新LoginContact(jObject);
            }
            赶上(IOException异常E)
            {
                e.printStackTrace();
            }赶上(JSONException E){
                e.printStackTrace();
            }
        }赶上(ClientProtocolException E){
            e.printStackTrace();
        }赶上(IOException异常五){
            e.printStackTrace();
        }        返回接触;
    }

下面是一个code在我的.NET Web服务返回JSON:

 列表<联系和GT;清单= this.getAllContacts();
        JS的JavaScriptSerializer =新的JavaScriptSerializer();
        字符串的Json = js.Serialize(名单);
        返回JSON;


解决方案

使用下面的类来分析您的JSON文件。

 公共类JSONParser {公共JSONParser(){}的JSONObject jObj;
JSON字符串;
InputStream为= NULL;公众的JSONObject getJsonFromUrl(字符串URL){
    // TODO自动生成方法存根    尝试{
        DefaultHttpClient的HttpClient =新DefaultHttpClient();
        HttpPost httpPost =新HttpPost(URL);
        HTT presponse HTT presponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = HTT presponse.getEntity();        是= httpEntity.getContent();
    }赶上(例外五){
        e.printStackTrace();
    }    尝试{
        读者的BufferedReader =新的BufferedReader(新的InputStreamReader(是,ISO-8859-1),8);
        StringBuilder的SB =新的StringBuilder();
        串线= NULL;        而((行= reader.readLine())!= NULL){
            sb.append(行+\\ n);
        }
        is.close();
        JSON = sb.toString();        的System.out.println(JSON字符串:+ JSON);
    }赶上(例外五){
        e.printStackTrace();
    }    尝试{
        jObj =新的JSONObject(JSON);
    }赶上(例外五){
        e.printStackTrace();
    }
    返回jObj;
}

}

从这个类就是getJsonFromUrl返回你的JSONObject方法。然后通过迭代的JSONObject从该对象访问数据。

现在在你的主类使用以下code。

  JSONParser P =新JSONParser();
JSONObject的J = p.getJsonFromUrl(你的JSON网址或贴上您的JSON数据);//这里得到一个从你的JSONObject您所有的数据之一。在你的情况下字符串的ContactID = j.getString(的ContactID);

希望它会帮助你。

Can someone help me why my json is invalid even i use JSON Editor Online to check and it says my json is valid? This is my json response:

08-31 08:02:43.921: W/System.err(4767): org.json.JSONException: Value {"ContactID":5,"AdminUnitID":0,"UserRoleID":0,"SecretQuestionID":0,"FirstName":"nhan2","LastName":"nguyen2","Title":"student","Email":"nhan@mail.com","ProfileURL":"test","InactiveDate":"\/Date(-62135568000000)\/","UserName":null,"Password":null,"SecretAnswer":null,"RegisterDate":"\/Date(-62135568000000)\/","LastLogin":"\/Date(-62135568000000)\/"} of type java.lang.String cannot be converted to JSONObject

Here is my code:

LoginContact contact = null;
    @Override
    protected LoginContact doInBackground(String... params) {
        JSONObject jObject = null;
        try
        {
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet(params[0]);
            request.setHeader("Accept","application/json");
            request.setHeader("Content-type", "application/json; charset=utf-8");               
            HttpResponse response = client.execute(request);
            HttpEntity entity = response.getEntity();
            InputStream in = entity.getContent();
            InputStreamReader reader = new InputStreamReader(in, "UTF-8");
            try
            {
                BufferedReader br = new BufferedReader(reader);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while((line = br.readLine()) != null)
                {
                    sb.append(line + "\n");
                }
                in.close();
                String result = sb.toString();
                jObject = new JSONObject(result);
                contact = new LoginContact(jObject);
            }
            catch(IOException e)
            {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            } 
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return contact;
    }

Here is a code to return Json in my .NET web service:

List<Contacts> list = this.getAllContacts();
        JavaScriptSerializer js = new JavaScriptSerializer();
        string Json = js.Serialize(list);
        return Json;

解决方案

Use below class to parse your json file.

public class JSONParser {

public JSONParser() {

}

JSONObject jObj;
String json;
InputStream is = null;

public JSONObject getJsonFromUrl(String url) {
    // TODO Auto-generated method stub

    try {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();

        is = httpEntity.getContent();
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;

        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();

        System.out.println("Json String : " + json);
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        jObj = new JSONObject(json);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return jObj;
}

}

Method from this class that is getJsonFromUrl is returned you JSONObject. Then Access your data from that object by iterating through JSONObject.

Now in your main class using following code.

JSONParser p = new JSONParser();
JSONObject j = p.getJsonFromUrl("Your json Url or paste your json data here");

// Here get your all data one by one from your jsonObject. In you case 

String contactID = j.getString("ContactID");

Hope it will help you.

这篇关于无效的JSON对象中的Andr​​oid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆