JSON学习笔记

来源:互联网 发布:广州淘宝拍照的地方 编辑:程序博客网 时间:2024/06/11 18:24

文本官方网站,欢迎大家吐槽~
有关的知识点可能过于简单,但是又不得不去写,想要养成写博客的习惯,不仅仅是对自己知识的总结,也是对耐力的磨练,虽然目前学的东西很浅,但是随着以后的深入不断去补充相关的知识,使自己的文章更加精炼。

最近在做一个网络请求的demo,用到了JSON,做一次总结。

一、JSON基础知识点?

JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。

JSON就是一串字符串 只不过元素会使用特定的符号标注。

{} 双括号表示对象

[] 中括号表示数组

” ” 双引号内是属性或值

冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)

二、Json解析

如图

第一个 “size” 键的值为 9.5,由此可以判断出 该值属于数值类型,因为值周围没有引号。
第二个 “wide” 键的值为 true,不带引号。这 表示该值属于布尔值。如果数字周围有引号,则表示其为字符串。也就是我们在第三个键值对中找到的字符串。
第三个 “country-of-origin”键的值为 “usa”。
第四个键是 “style”,其值表示为对象,因为两侧有大括号。

在 style 对象内部,我们可以找到两个嵌套键/值对:一个为 catergories,一个为color。其实 catergories 的值是一个数组,“boot” 和 “winklepicker”被包含在中括号内组成一个数组。 按照这种方式,通过使用对象和数组,可以嵌套几组值, 随后便可在这些容器中放入不同的数据类型。

如果我们请求的数据很多比如这个URL;
我们就需要JSON整理格式化,推荐一个格式网站

三、如何获取JSON中的数据

通过这个demo,先说明一下这个demo是在给定的 JSON ,下面的String中就是我们
需要解析的JSON
通过上面给的JSON格式工具,我们做一些操作取出 “features”对象中的一些值。
便于理解贴一张图吧

需要的数据

下面的代码只是贴出必要的数据,方便需要运行看效果的同学直接拿来用

demo:

String部分参考,因为CSDN支持markdown不是特别好

           //创建一个JSON对象,并传入JSON格式的数据            JSONObject  root = new JSONObject(SAMPLE_JSON_RESPONSE);            //获取数组对象“features” 从图中可以看出“features”后面是中括号            JSONArray featureArray=root.getJSONArray("features");            //这个循环只是获取每个数组中相同的对象                for(int i=0;i<featureArray.length();i++){                    //获取第 i 个数组中的数据                    JSONObject earthquake= featureArray.getJSONObject(i);                    //获取该对象中的“properties”JSON对象                    JSONObject properties=earthquake.getJSONObject("properties");                    //获取键为“mag”的值                    Double mag= properties.getDouble("mag");                    //获取键为“place”的值                     String place= properties.getString("place");                    //获取键为“time”的值                    Long time= Long.valueOf(properties.getString("time"));

上面获取出来的值可有用 log 或者 Toast 显示出来

四、JSON 数据中时间格式的转换

可以看出来 JSON 中 “time” 键值为毫秒数,我们便于观看需要转换为我们熟悉的格式,所以我们用到了 SimpleDateFormat类,基本格式是:

//引号中的格式参照下图SimpleDateFormat dateFormat=new SimpleDateFormat ("yyyy-MM-dd");Date date=new Date(time);  //time为获取到的毫秒数String showDate=dateFormat.format(date);//用 log 或者 Toast 显示出来

如果要处理数值的格式我们用DecimalFormat类,用法很简单,如:

//“0”表示站位,下面的意思表示只保留一位小数//当然我们可以使用Math类也能达到保留一位小数 DecimalFormat decimalFormat=new DecimalFormat("0.0");

更详细的可以查看 DecimalFormat 格式方法,里面也有格式图,方便理解;

 五、字符串的操控

你也可以参阅文档中的CharSequence。CharSequence 是一组字符,字符串是一种更具体的 CharSequence (String 类是 CharSequence 类的 扩展类)。如果某个方法要求使用 CharSequence 作为输入,你可以 传递一个字符串。 以下是一些可以在 String 对象上调用的其他方法:
length() - 返回字符串中的 字符数
contains(CharSequence cs) - 根据 原始字符串中是否包含输入 CharSequence (或输入 String)返回 true 或 false
indexOf(String string) - 返回输入 String 首次在原始 String 中出现的位置的索引,如果 原始 String 中不存在输入 String,则返回 -1
split(String string) - 根据输入 String 中 指定的位置对原始 String 进行拆分, 并返回包含拆分后 String 部分的数组。
substring(int start, int end) - 返回 一个新的 String,该 String 为从开始索引到结束索引 之间的内容(包括开始索引但不包括结束索引)。

demo

demo 中,我们需要拆分“place” 中的数据,其中以“of”为划分

//说明一下mData.getLocation()是adpater中获取的具体的“place”数据  String show=null;        //获取出现“of”的索引值        int indexOf=mData.getLocation().indexOf("of");      //如果数据包含“of”        if(mData.getLocation().contains("of")){             //从0索引开始到of之后得到索引结束取出之间的值             show=mData.getLocation().substring(0,indexOf+2);        }else{            show="near the";        }      //设置显示的文本        TextView mLocation=(TextView)findViewById(R.id.);        mLocation.setText(show);

更多的操作需要具体要求修改,答案不唯一,有兴趣可以把其他的几个方法的尝试一下

0 0
原创粉丝点击