之前我们都是解析XML文件,虽然规范化了文件传输的定义格式,但是大家有没有意识到每次传输前都要进行元素声明,这样传输中将传出很多无用数据,导致传输数据量增大,而且解析xml操作很复杂,作者在之前编程中也几近崩溃,现在我们介绍一种轻量级的数据交换格式--JSON
JSON将对象中数据转化为字符串。在应用程序中传递,最重要的是在异步系统中进行服务器和客户端之间的数据传递,这里将在网络连接课程讲到,利用JSON解析打包发送手机端数据给服务器。
{
"code":"状态码",
"message":"返回信息/错误信息",
"result":{
"user_id":"用户ID"
}
}
JSON结构是由外向内读
有点想数据库结构,先从spj读起,再访问子类
一个外部JSONObject保存多个字符串信息例如name,address,telephone和一个JSONArray对象
一个JSONArray对象保存多个JSONObject对象
每一个保存在JSONArray下的JSONObject保存多种数据类型。
现在将数据写入文档
Activity文件
public class MainActivity extends Activity { private String nameData[] = new String[] { "张依依", "蓝杰培训", "lanjie" }; private int ageData[] = new int[] { 30, 5, 7 }; private boolean isMarraiedData[] = new boolean[] { false, true, false }; private double salaryData[] = new double[] { 3000.0, 5000.0, 9000.0 }; private Date birthdayData[] = new Date[] { new Date(), new Date(), new Date() }; private String companyName = "湖南大学(信息科学与工程学院)" ; private String companyAddr = "长沙市岳麓区麓山南路453" ; private String companyTel = "13283928931" ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.activity_main); JSONObject allData = new JSONObject(); // 建立最外面的节点对象 JSONArray sing = new JSONArray(); // 定义数组 for (int x = 0; x < this.nameData.length; x++) { // 将数组内容配置到相应的节点 JSONObject temp = new JSONObject(); // 每一个包装的数据都是JSONObject try { temp.put("name", this.nameData[x]);//一个键对应相应数值 temp.put("age", this.ageData[x]); temp.put("married", this.isMarraiedData[x]); temp.put("salary", this.salaryData[x]); temp.put("birthday", this.birthdayData[x]); } catch (JSONException e) { e.printStackTrace(); } sing.put(temp); // 保存多个JSONObject } try { allData.put("persondata", sing); allData.put("company", this.companyName) ; allData.put("address", this.companyAddr) ; allData.put("telephone", this.companyTel) ; } catch (JSONException e) { e.printStackTrace(); } if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // 不存在不操作 return; // 返回到程序的被调用处 } File file = new File(Environment.getExternalStorageDirectory() + File.separator + "eedata" + File.separator + "json.txt"); // 要输出文件的路径 if (!file.getParentFile().exists()) { // 文件不存在 file.getParentFile().mkdirs(); // 创建文件夹 } PrintStream out = null; try { out = new PrintStream(new FileOutputStream(file)); out.print(allData.toString()); // 将数据变为字符串后保存 } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (out != null) { out.close(); // 关闭输出 } } } }
然后在相应路径找到文件json.txt显示如下:
接下来我们要试着把json文件解析出来
首先布局文件定义:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/msg" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout>
Activity JSON解析
public class MainActivity extends Activity { private TextView msg = null ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.activity_main); this.msg = (TextView) super.findViewById(R.id.msg) ; String str = "[{\"id\":1,\"name\":\"张依依\",\"age\":21}," + "{\"id\":2,\"name\":\"lanjie\",\"age\":10}]"; StringBuffer buf = new StringBuffer() ; try { List<Map<String,Object>> all = this.parseJson(str) ;//json解析文本格式 Iterator<Map<String,Object>> iter = all.iterator() ; while(iter.hasNext()){ Map<String,Object> map = iter.next() ; buf.append("ID:" + map.get("id") + ",姓名:" + map.get("name") + ",年龄:" + map.get("age") + "\n"); } } catch (Exception e) { e.printStackTrace(); } this.msg.setText(buf) ; } private List<Map<String, Object>> parseJson(String data) throws Exception { List<Map<String, Object>> all = new ArrayList<Map<String, Object>>(); JSONArray jsonArr = new JSONArray(data); // 是数组 for (int x = 0; x < jsonArr.length(); x++) { Map<String, Object> map = new HashMap<String, Object>(); JSONObject jsonObj = jsonArr.getJSONObject(x); map.put("id", jsonObj.getInt("id")); map.put("name", jsonObj.getString("name")); map.put("age", jsonObj.getInt("age")); all.add(map); } return all; } }
实现效果如图:
相关推荐
本篇将详细讲解如何在Android应用中解析JSON数据,主要涉及以下几个方面: 1. JSON基本结构 JSON由两种基本结构构成:对象(Object)和数组(Array)。对象是以花括号 `{}` 包围的键值对集合,键用双引号括起,如`...
本篇文章将详细介绍如何创建一个实用的JSON数据解析封装类,以便快速有效地处理各种形式的JSON数据。 首先,我们需要引入一个JSON库,Android SDK本身包含了org.json库,但为了更强大的功能和更好的性能,推荐使用...
在本示例"json复杂数据解析demo"中,我们将探讨如何处理结构复杂、层次丰富的JSON数据。 首先,我们需要理解JSON的基本结构。JSON数据由键值对组成,键用引号包围,后面跟着冒号,值可以是字符串、数字、布尔值、...
本教程将深入探讨在Android中如何解析和处理JSON数据。 首先,我们需要理解JSON的基本结构。JSON是一种基于键值对的数据表示方式,主要由对象(Object)和数组(Array)构成。对象用花括号 `{}` 包裹,键值对以冒号...
5. **处理嵌套结构**:PB支持解析层次结构的JSON数据,这对于处理复杂的业务逻辑或创建多层级的UI元素(如树形菜单)非常重要。 6. **HTTP方法支持**:PB支持GET和POST这两种最常用的HTTP方法,GET用于获取资源,...
标题提到的“json 数据解析包”是一组Java库,它们可以帮助开发者在Java环境中解析和操作JSON数据。以下是这些库的详细介绍: 1. **commons-collections-3.2.jar**:Apache Commons Collections是Apache软件基金会...
总的来说,这个“json数据解析源码”项目涵盖了从获取到解析JSON数据,再到对数据进行操作和输出的整个流程。在实际应用中,根据具体需求,可能还需要处理错误、验证数据格式、优化性能等方面的问题。理解并掌握这些...
5. **导出**:将格式化的JSON数据保存为文件,或者复制到剪贴板。 6. **压缩/展开**:折叠或展开嵌套的JSON对象和数组,以便更有效地查看数据结构。 7. **去除空值**:如描述中所述,自动移除值为null的字段,简化...
Newtonsoft.Json已经足够强大,易用性也没得说。但是在使用过程中存在着一个问题,如果数据不存在...JsonObject类和JsonArray类可以相互嵌套,支持原生类的JsonPath检索能力,满足Json数据解析和Json数据封装常见需求。
json数据解析
这个话题“奇葩json数据解析”就聚焦于如何处理那些不符合标准的JSON数据。 在描述中提到,使用AFNetworking(简称AFN)进行POST请求时遇到了一个问题:返回的数据不是标准的JSON格式,导致解析失败。AFNetworking...
基于python+pyqt+paho.mqtt 的MQTT客户端实现及json数据解析 基于python+pyqt+paho.mqtt 的MQTT客户端实现及json数据解析 基于python+pyqt+paho.mqtt 的MQTT客户端实现及json数据解析 基于python+pyqt+paho.mqtt 的...
本文将详细介绍如何在Android应用中使用JSON和Gson进行数据解析,并通过实际代码示例来演示各种类型的JSON数据处理。 一、JSON基础 1. JSON格式:JSON是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式...
在标题"Json数据解析包"中,我们可以理解为这是一个专门用于解析和处理JSON格式数据的工具包。在实际的编程工作中,解析JSON数据是相当常见的需求,例如从服务器获取响应数据、读取配置文件或者存储轻量级的数据结构...
在Android开发中,JSON...总的来说,Android中的JSON数据解析是通过理解JSON结构,结合`org.json`库或Gson库,以及适当的网络请求库来实现的。合理使用这些工具,能有效地处理和展示从服务器获取的JSON数据。
**二、JSON数据解析** JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java中,可以使用`org.json`库来解析JSON数据。 1. **导入JSON库**:在...
基于python+pyqt+paho.mqtt 的MQTT客户端实现及json数据解析(源码),开箱即用! 基于python+pyqt+paho.mqtt 的MQTT客户端实现及json数据解析(源码),开箱即用! 基于python+pyqt+paho.mqtt 的MQTT客户端实现及...
通过以上步骤,我们可以在Kettle中有效地解析JSON数据,并将其写入数据库中。这不仅可以提高数据处理的效率,还可以确保数据的一致性和准确性。此外,使用Java库如`JSON Simple`可以更加灵活地处理各种类型的JSON...
用jquery解析JSON数据的方法,作为jquery异步请求的传输对象,jquery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject等插件封装的JSON对象,与此亦是大同小异,这里...
本文将深入探讨如何在iOS中解析JSON数据,以“IOS之JSON数据解析”为主题,结合标签“源码”和“工具”,我们将讨论如何使用SBJson框架进行JSON的解析。 首先,JSON是一种轻量级的、易于人阅读和编写的数据格式,...