首页 >> 大全

《第一行代码》第二版 学习总结24 JSON数据解析

2023-09-09 大全 28 作者:考证青年

最近利用下班时间,找了看什么书比较适合初学的朋友,很多人推荐了这本书,于是就买了一本,感觉看书,思考,动手,再思考和总结这样过程还是很有必要的,于是就打算把自己学习的东西简单的总结一下;方便自己以后查找,也有利于学习的巩固。在这里首先要感谢一下书籍的作者——郭霖前辈。

之前几篇介绍了关于如何访问网络数据,基本使用,基本使用;因为网络传输数据(文本数据)常用的用两种(XML和JSON)后者更轻量,但是语义没有前者好;但是毫无疑问,对于两种数据的处理,是我们网络访问数据避免不了的问题,今天我们就来看看对JSON的解析实现。如果你对JSON了解较少,你可以查看我的另一篇博客,里面有关于JSON的基本介绍。

1,准备工作

这篇文章和XML数据解析是“兄弟篇”,准备工作参见XML数据解析;我这里给出原始的JSON数据如下(test.json):

[
{
"name":"why",
"age":"26",
"sex":"male"
},
{
"name":"jr",
"age":"24",
"sex":"female"
}]

2,示例代码

.java代码:

_解析json的方法_解析json出错是什么意思

package com.hfut.operationjson;import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import java.io.IOException;
import java.util.List;import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class MainActivity extends AppCompatActivity {EditText jsonName;TextView jsonContent;Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 1:jsonContent.setText((String) msg.obj);break;}}};public final String localURL = "http://192.168.31.2:8088/";private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);jsonName = findViewById(R.id.json_name);jsonContent = findViewById(R.id.json_content);}public void jSONObjectParse(View view) {getData(view.getId());}public void gSONParse(View view) {getData(view.getId());}//JSONObject对象解析private String parseJSONwithJSONObject(String jsonData) {StringBuilder stringBuilder = new StringBuilder();try {JSONArray array = new JSONArray(jsonData);Log.i(TAG, "parseJSONwithJSONObject: "+array.length());//遍历json串,获取每一个json对象,在取键值对数据for (int i = 0; i < array.length(); i++) {JSONObject jsonObject = array.getJSONObject(i);String name = jsonObject.getString("name");String age = jsonObject.getString("age");String sex = jsonObject.getString("sex");stringBuilder.append("  name:"+name+";  age:"+age+";  sex:"+sex+"\n");}} catch (JSONException e) {e.printStackTrace();}return stringBuilder.toString();}//GSON解析private String parseJSONwithGSON(String jsonData) {Gson gson=new Gson();StringBuilder stringBuilder = new StringBuilder();//通过json字符串获取对象数组List list=gson.fromJson(jsonData,new TypeToken>(){}.getType());for (int i = 0; i < list.size(); i++) {Student student=list.get(i);String name = student.getName();String age =student.getAge();String sex = student.getSex();stringBuilder.append("  name:"+name+";  age:"+age+";  sex:"+sex+"\n");}return stringBuilder.toString();}private void getData(final int methodID){final StringBuilder stringBuilder = new StringBuilder();new Thread(new Runnable() {@Overridepublic void run() {String tempUrl = localURL + jsonName.getText().toString();OkHttpClient okHttpClient = new OkHttpClient();Request request = new Request.Builder().url(tempUrl).build();try {Response response = okHttpClient.newCall(request).execute();String result = response.body().string();Message message = new Message();String parsedData="";//点击不同按钮,执行不同的解析方法switch (methodID){case R.id.JSONObjectWay:parsedData=parseJSONwithJSONObject(result);stringBuilder.append("解析方式为:JSONObjectWay\n");break;case R.id.GSONWay:parsedData=parseJSONwithGSON(result);stringBuilder.append("解析方式为:GSONWay\n");break;}stringBuilder.append("源数据为:\n");stringBuilder.append(result+"\n");stringBuilder.append("解析数据结果:\n");stringBuilder.append(parsedData);message.what = 1;message.obj = stringBuilder.toString();handler.sendMessage(message);Log.i(TAG, "run: " + result);} catch (IOException e) {e.printStackTrace();}}}).start();}
}

.java代码:

package com.hfut.operationjson;/*** author:why* created on: 2018/4/12 15:19* description:*/
public class Student {private String name;private String age;private String sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}
}

.xml代码:


主配置文件.xml代码:


解析json出错是什么意思_解析json的方法_

3,运行结果

第一步:运行程序

解析json的方法_解析json出错是什么意思_

第二步:点击“解析JSON”

解析json的方法__解析json出错是什么意思

第三步:点击“GSON解析JSON”

解析json出错是什么意思__解析json的方法

其实有很多不错的开源库用于处理JSON数据,但是我觉得基本的使用这两种方式足够了。这里我写的非常的简单,其实你在我的另一篇博客里面会发现,其实GSON功能还是非常多的。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了