Android JSON数据被视为XML,如何修复?

Android JSON数据被视为XML,如何修复?,android,xml,json,Android,Xml,Json,我试图显示这个链接中的JSON数据 我一直得到的错误是:java.lang.string类型的值xml无法转换为JSONObject。但我很确定链接显示的是JSON。有什么建议吗 这就是我到目前为止所做的: public class MainActivity extends Activity { TextView txt1; TextView txt2; //TextView txt3; private static String url = "http://

我试图显示这个链接中的JSON数据


我一直得到的错误是:java.lang.string类型的值xml无法转换为JSONObject。但我很确定链接显示的是JSON。有什么建议吗

这就是我到目前为止所做的:

public class MainActivity extends Activity {
    TextView txt1;
    TextView txt2;
    //TextView txt3;

    private static String url = "http://opendata.rijksoverheid.nl/v1/sources/rijksoverheid/infotypes/schoolholidays/schoolyear/2015-2016?output=json";
    private static final String TAG_CONTENT = "content";
    private static final String TAG_TITLE = "title";
    private static final String TAG_SCHOOLYEAR = "schoolyear";
    //private static final String TAG_EMAIL = "email";
    JSONArray content = null;

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

        new JSONParse().execute();
    }

    private class JSONParse extends AsyncTask<String, String, JSONObject> {

        protected void onPreExecute() {
            super.onPreExecute();
            txt1 = (TextView)findViewById(R.id.textView1);
            txt2 = (TextView)findViewById(R.id.textView2);
            //txt3 = (TextView)findViewById(R.id.textView3);
        }

        @Override
        protected JSONObject doInBackground(String... arg0) {
            JSONParser jParser = new JSONParser();
            JSONObject json = jParser.getJSONFromUrl(url);
            return json;
        }

        protected void onPostExecute(JSONObject json) {
            try {
                content = json.getJSONArray(TAG_CONTENT);
                JSONObject c = content.getJSONObject(0);

                String title = c.getString(TAG_TITLE);
                String schoolyear = c.getString(TAG_SCHOOLYEAR);
                //String email = c.getString(TAG_EMAIL);

                txt1.setText(title);
                txt2.setText(schoolyear);
                //txt3.setText(email);
               } catch(JSONException e) {
                e.printStackTrace();
               }
        }
    }
}

public class JSONParser {
    static InputStream is = null;
    static JSONObject jobj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    public JSONObject getJSONFromUrl(String url) {
        // HTTP request
        try {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        } catch(UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch(ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "utf-8"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch(Exception e) {
            Log.e("Error", "Error converting result" + e.toString());
        }
        // parse string to JSON object
        try {
            jobj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data" + e.toString());
        }
        // return JSON string
        return jobj;
    }
}
公共类MainActivity扩展活动{
TextView txt1;
TextView txt2;
//TextView-txt3;
专用静态字符串url=”http://opendata.rijksoverheid.nl/v1/sources/rijksoverheid/infotypes/schoolholidays/schoolyear/2015-2016?output=json";
私有静态最终字符串标记_CONTENT=“CONTENT”;
私有静态最终字符串标记_TITLE=“TITLE”;
私有静态最终字符串标记_SCHOOLYEAR=“SCHOOLYEAR”;
//私有静态最终字符串标记\u EMAIL=“EMAIL”;
JSONArray content=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
新建JSONParse().execute();
}
私有类JSONParse扩展了异步任务{
受保护的void onPreExecute(){
super.onPreExecute();
txt1=(TextView)findViewById(R.id.textView1);
txt2=(TextView)findViewById(R.id.textView2);
//txt3=(TextView)findViewById(R.id.textView3);
}
@凌驾
受保护的JSONObject doInBackground(字符串…arg0){
JSONParser jParser=新的JSONParser();
JSONObject json=jParser.getJSONFromUrl(url);
返回json;
}
受保护的void onPostExecute(JSONObject json){
试一试{
content=json.getJSONArray(标记内容);
JSONObject c=content.getJSONObject(0);
String title=c.getString(TAG_title);
String schoolyar=c.getString(TAG_schoolyar);
//String email=c.getString(TAG_email);
txt1.setText(标题);
txt2.setText(学年);
//txt3.setText(电子邮件);
}捕获(JSONException e){
e、 printStackTrace();
}
}
}
}
公共类JSONParser{
静态InputStream为空;
静态JSONObject jobj=null;
静态字符串json=“”;
//建造师
公共JSONParser(){
}
公共JSONObject getJSONFromUrl(字符串url){
//HTTP请求
试一试{
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(url);
HttpResponse HttpResponse=httpClient.execute(httpPost);
HttpEntity HttpEntity=httpResponse.getEntity();
is=httpEntity.getContent();
}捕获(不支持的编码异常e){
e、 printStackTrace();
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
试一试{
BufferedReader reader=新的BufferedReader(新的InputStreamReader(
为“utf-8”)、8);
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
is.close();
json=sb.toString();
}捕获(例外e){
Log.e(“错误”,“错误转换结果”+e.toString());
}
//将字符串解析为JSON对象
试一试{
jobj=新的JSONObject(json);
}捕获(JSONException e){
Log.e(“JSON解析器”,“错误解析数据”+e.toString());
}
//返回JSON字符串
返回jobj;
}
}

就加载JSON文件而言,您可以使用异步任务下载JSON文件

既然您提到了术语
largescale
,我假设您在阅读JSON文件时希望获得一些快速性能

您可以尝试使用一些json解析库,而不是使用本机包(org.json)

  • 格森
  • 杰克逊

  • 希望这能有所帮助。

    显然,在这一行中,将HttpPost更改为HttpGet就成功了。。不知道为什么

    HttpPost httpPost = new HttpPost(url);
    
    to
    
    HttpGet httpPost = new HttpGet(url);
    

    你能详细说明你面临的问题吗?你面临的问题是什么。您的JSON数据似乎足够简单,可以轻松解析。我一直得到的错误是:java.lang.string类型的值xml无法转换为JSONObject。但我很确定链接显示的是JSON。有什么建议吗?我以为我把标签写错了。但它似乎只是将数据视为xml,而不是json。有没有办法改变这种状况?因为?output=json标记应该会改变这一点。