Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从JSON中获取特定值?_Android_Json - Fatal编程技术网

Android 如何从JSON中获取特定值?

Android 如何从JSON中获取特定值?,android,json,Android,Json,我试图从JSON文件中的字段中获取特定值。这是我第一次使用JSON文件,所以我不确定是否正确 try { URL url = new URL(API_URL + city +".json"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); try { BufferedReader bufferedReader = new BufferedReader(

我试图从JSON文件中的字段中获取特定值。这是我第一次使用JSON文件,所以我不确定是否正确

try {
    URL url = new URL(API_URL + city +".json");
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    try {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
        StringBuilder stringBuilder = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            stringBuilder.append(line).append("\n");
        }

    bufferedReader.close();
    return stringBuilder.toString();
}
JSONObject object = new JSONObject(response);
String weather = object.getString("weather");
此块将从天气网站获取JSON,然后以字符串形式返回JSON。该字符串将在下面使用。不幸的是,每当我在Android Studio中运行这个应用程序并查看日志时,日志总是说天气没有任何价值

protected void onPostExecute(String response) {
    if(response == null) {
        response = "THERE WAS AN ERROR";
    }

    progressBar.setVisibility(View.GONE);
    Log.i("INFO", response);
    responseView.setText(response);

    // TODO: check this.exception
    // TODO: do something with the feed

    try {
        JSONObject object = (JSONObject) new JSONTokener(response).nextValue();
        String weather = object.getString("weather");
        Toast.makeText(MyActivity.this, "There is rain", Toast.LENGTH_SHORT).show();
    } catch (JSONException e) {
        e.printStackTrace();
    }
}
我想做的是从
weather
部分获取信息


是我试图解析的JSON链接。这个文本框认为JSON响应中的链接太多,我无法在这里发布。我正在试图弄清楚到底发生了什么,任何帮助都将不胜感激。

您可以打印出
响应
,看看它是否就是您的JSON

假设您正确获取了JSON字符串

try {
    URL url = new URL(API_URL + city +".json");
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    try {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
        StringBuilder stringBuilder = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            stringBuilder.append(line).append("\n");
        }

    bufferedReader.close();
    return stringBuilder.toString();
}
JSONObject object = new JSONObject(response);
String weather = object.getString("weather");
但是,如果您获得的JSON正是您的
响应
,则上述代码不起作用,因为没有
天气
字符串。根目录仅包含
响应
当前观察

如果要获得的是
当前观测下的
天气
,则应使用以下代码

JSONObject object = new JSONObject(response);
JSONObject current_obs = object.getJSONObject("current_observation");
String weather = current_obs.getString("weather"); // Clear

我有一个使用开放天气图api完成的天气应用示例。这就是你想要的一切

代码如下:

首先,您需要获取字符串形式的响应。 现在,根据响应启动json解析。 或 您也可以使用Gson类进行json解析

从JSONObject获取json值:

{"weather":"sunny"}
解析JSONObject的代码段

JSONObject object = new JsonObject(response);
String weather= object.getString("weather");
从JSONArray获取json值:

[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...]
解析JsonArray的代码片段

JSONArray jsonarray = new JSONArray(response);
for (int i = 0; i < jsonarray.length(); i++) {
    JSONObject jsonobject = jsonarray.getJSONObject(i);
    String name = jsonobject.getString("name");
    String url = jsonobject.getString("url");
}
JSONArray JSONArray=新的JSONArray(响应);
for(int i=0;i

希望对您有所帮助。

您是否尝试使用
JSONObject object=new JSONObject(response)
?是的,我刚刚调整了代码。JSONObject对象=新的JSONObject(响应);字符串日期=object.getString(“天气”);同样的事情对天气没有价值。