使用JSONObject解析JSON数据

JSONObject是Android官方提供用来解析JSON数据的API。

要解析JSON数据,首先我们得要有一个放有JSON数据的服务器地址,这里我自己配置了一个Web服务器,并且将JSON数据放在了上面。在浏览器输入JSON数据的服务器地址,出现的内容如下所示:
《使用JSONObject解析JSON数据》
从上图,我们可以看到,http://192.168.43.8/get_data.json 这个地址是JSON数据的服务器地址,当然这个是我自己配置的,其中192.168.43.8是我本机的ip地址,而get_data.json是Web服务器根目录下的一个文件。这些都不重要,重要的是,你要拿到一个JSON数据的服务器地址,只要拿到这个地址了,我们就可以解析了。

好了,现在JSON数据的服务器地址我们已经拿到了,现在我们来做解析的准备工作,因为要解析JSON数据,肯定是要发送HTTP请求的,然后对返回的数据进行解析,如果你对发送HTTP请求和获取返回的数据还不熟悉,请看我的另外两篇博客:

使用OkHttp发送HTTP请求并显示返回的数据
使用HttpURLConnection发送HTTP请求并显示请求到的数据

这两篇博客都可以实现发送HTTP的请求并获取返回的数据。
我下面的源码是以使用OkHttp发送HTTP请求为基础写的。

当然,别忘记加网络权限,在AndroidManifest.xml中加入以下代码:

<uses-permission android:name="android.permission.INTERNET" />

现在我们来看看源码:
MainActivity的xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">

    <Button android:id="@+id/btn_send_request" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="发送请求" android:textSize="20sp" />

</LinearLayout>

布局代码就是一个按钮,因为我们这里演示的就是点击按钮发送HTTP请求,然后将返回的JSON数据进行解析在打印日志显示出来。

MainActivity的java代码如下:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
    private Button mBtn_sendRequest;

    @Override
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtn_sendRequest = findViewById(R.id.btn_send_request);
        mBtn_sendRequest.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) { 
        if (v.getId() == R.id.btn_send_request) { 
            // 发送网络请求并读取的方法
            sendRequestWithOkHttp();
        }
    }

    private void sendRequestWithOkHttp() { 
        new Thread(new Runnable() { 
            @Override
            public void run() { 
                try { 
                    // 创建一个OkHttpClient的实例
                    OkHttpClient client = new OkHttpClient();
                    // 如果要发送一条HTTP请求,就需要创建一个Request对象
                    // 可在最终的build()方法之前连缀很多其他方法来丰富这个Request对象
                    Request request = new Request.Builder()
                            //此处的url应为json数据的服务器地址
                            .url("http://192.168.43.8/get_data.json")
                            .build();
                    // 调用OkHttpClient的newCall()方法来创建一个Call对象,并调用execute()方法来发送请求并获取服务器的返回数据
                    Response response = client.newCall(request).execute();
                    // 其中Response对象就是服务器返回的数据,将数据转换成字符串
                    String jsonData = response.body().string();

                    // 将JSON数据传入parseJSON()函数
                    parseJSON(jsonData);

                } catch (IOException e) { 
                    e.printStackTrace();
                }
            }
        }).start();
    }

    private void parseJSON(String jsonData) { 
        try { 
            JSONArray jsonArray = new JSONArray(jsonData);
            for (int i = 0; i < jsonArray.length(); i++) { 
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                String id = jsonObject.getString("id");
                String name = jsonObject.getString("name");
                String version = jsonObject.getString("version");

                //打印日志
                Log.d("MainActivity", id);
                Log.d("MainActivity", name);
                Log.d("MainActivity", version);

            }
        } catch (JSONException e) { 
            e.printStackTrace();
        }
    }


}

这里我们主要看解析JSON数据那一部分,也就是获取服务器数据之后调用的parseJSON()方法,在这个方法中,首先我们把获取的服务器数据传了进来,由于我们服务器中定义的是一个JSON数组,因此这里首先是将服务器返回的数据传入到了一个JSONArray对象中。然后遍历这个JSONArray,从中取出的每一个元素都是一个JSONObject对象,每个JSONObject对象中又会包含id、name、version这些数据。接下来只需要调用getString()方法将这些数据取出,并打印出来就可以了。

最终日志效果图如下:
《使用JSONObject解析JSON数据》

    原文作者:冰之沁泠
    原文地址: https://blog.csdn.net/weixin_43344890/article/details/96424978
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞