JSON学习

1.json的定义

json(JavaScript Object Notation) 是一种轻量级的数据交换格式,能够在服务器之间交换数据。在json出现之前,通用的数据交换语言是XML,但是XML的生成与解析比较麻烦。json的规格非常简单,规定如下:

(1)并列的数据之间用逗号(",")分隔

(2)映射用冒号(“:”)

(3)并列数据的集合(数组)用方括号(“[]”)表示

(4)映射的集合(对象)用大括号(“{}”)表示

2.json的构建方式

json简单说就是javascript中的对象和数组,所以json的构建结构就有对象和数组两种,通过这两种结构可以表示各种复杂的结构

(1)对象

对象在js中表示为“{}”扩起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

举例:

{ "firstName": "Brett" }

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }

(2)数组

数组在js中是中括号“[]”扩起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

举例:

{ "people": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},
{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
]}
这不难理解。在这个示例中,只有一个名为 people的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):
{ "programmers": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
] }
这里最值得注意的是,能够表示多个值,每个值进而包含多个值。

3.操作json数据

例子

var people = { "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
] }

(1)访问数据

要想访问 programmers 列表的第一个条目的姓氏,可以这样写

people.programmers[0].lastName;

(2)修改数据

people.musicians[1].lastName = "Rachmaninov";

(3)换回字符串

如果不能轻松地将对象转换回本文提到的文本格式,那么所有数据修改都没有太大的价值。在 JavaScript 中这种转换也很简单:

String newJSONtext = people.toJSONString();
这样就行了!现在就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作 Ajax 应用程序中的请求字符串。

4.使用json串

(1)json串转化为java类

不同平台互通时,会涉及到json串的传递。比如A要调用B的API,B的返回数据的格式如下

{"OcsInstances":
{"OcsInstance":
[
{
"Bandwidth":4.5,"Capacity":128,"ConnectionDomain":"m.jst.ocs.aliyuncs.com","Connections":50,"OcsInstanceId":"0c44e4dcf27611e2","OcsInstanceStatus":"Available","Port":11211,"Qps":300,"RegionId":"cn-hangzhou-cm10-01","UserName":"0c44e4dcf27611e2"
},
{
"Bandwidth":4.5,"Capacity":128,"ConnectionDomain":"m.jst.ocs.aliyuncs.com","Connections":50,"OcsInstanceId":"0c5baaf0f27611e2","OcsInstanceName":"111","OcsInstanceStatus":"Available","Port":11211,"Qps":300,"RegionId":"cn-hangzhou-cm10-01","UserName":"0c5baaf0f27611e2"
},
{
"Bandwidth":4.5,"Capacity":128,"ConnectionDomain":"m.jst.ocs.aliyuncs.com","Connections":50,"OcsInstanceId":"6e66955af39511e2","OcsInstanceName":"123","OcsInstanceStatus":"Available","Port":11211,"Qps":300,"RegionId":"cn-hangzhou-cm10-01","UserName":"6e66955af39511e2"
},
{
"Bandwidth":4.5,"Capacity":256,"ConnectionDomain":"m.jst.ocs.aliyuncs.com","Connections":50,"OcsInstanceId":"f4f69cd2f39f11e2","OcsInstanceName":"123","OcsInstanceStatus":"Available","Port":11211,"Qps":300,"RegionId":"cn-hangzhou-cm10-01","UserName":"f4f69cd2f39f11e2"
}
]
},
"RequestId":"1F9F97DE-F6C5-4F13-9075-F335B5358E56"
}

假如B要获得每条记录中OcsInstanceId、OcsInstanceName、OcsInstanceStatus的值,那么B如何解析呢,B一般会封装一个类,来对json串进行解析,类如下

public class ModifyOcsInstanceAttributeResponse extends AliyunResponse {

    private OcsInstances ocsInstances;//这里的OcsInstances就是上面的映射,ocsInstances里面包含数组OcsInstance,后面会定义

    public OcsInstances getOcsInstances() {
        return ocsInstances;
    }

    public void setOcsInstances(OcsInstances ocsInstances) {
        this.ocsInstances = ocsInstances;
    }
    //ocsInstances里面包含数组OcsInstance
    public static class OcsInstances {  
        private List<OcsInstance> ocsInstance;

        public List<OcsInstance> getOcsInstance() {
            return ocsInstance;
        }

        public void setOcsInstance(List<OcsInstance> ocsInstance) {
            this.ocsInstance = ocsInstance;
        }

    }
    //写OcsInstance的get、set三个属性(OcsInstanceId、OcsInstanceName、OcsInstanceStatus)的方法
    public static class OcsInstance implements Serializable {

        private String ocsInstanceId;
        private String ocsInstanceName;
        private String ocsInstanceStatus;

        public String getOcsInstanceId() {
            return ocsInstanceId;
        }

        public void setOcsInstanceId(String ocsInstanceId) {
            this.ocsInstanceId = ocsInstanceId;
        }

        public String getOcsInstanceName() {
            return ocsInstanceName;
        }

        public void setOcsInstanceName(String ocsInstanceName) {
            this.ocsInstanceName = ocsInstanceName;
        }

        public String getOcsInstanceStatus() {
            return ocsInstanceStatus;
        }

        public void setOcsInstanceStatus(String ocsInstanceStatus) {
            this.ocsInstanceStatus = ocsInstanceStatus;
        }

    }

}

(2)将后台数据以json串的形式给前端

比如后台数据为一个Map,我们要以json串的形式传给前台,我们可以这样写

 Map obj=new LinkedHashMap();

  obj.put("name","foo");

  obj.put("num",new Integer(100));

  obj.put("balance",new Double(1000.21));

  obj.put("is_vip",new Boolean(true));

  obj.put("nickname",null);

  String jsonText = JSONValue.toJSONString(obj);//将obj转化为json串的形式

  System.out.print(jsonText);

结果:{"name":"foo","num":100,"balance":1000.21,"is_vip":true,"nickname":null}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSONArray是JSON中的一个数据类型,表示一个由多个JSON对象组成的有序集合。通常用于表示一组数据,比如一组用户信息或一组商品信息等。 在Java中,我们可以使用org.json.JSONArray类来表示JSONArray对象。下面是一个示例代码,展示如何创建和操作JSONArray对象: ``` import org.json.JSONArray; import org.json.JSONObject; public class JSONArrayExample { public static void main(String[] args) { // 创建一个JSONArray对象 JSONArray jsonArray = new JSONArray(); // 向JSONArray中添加JSONObject JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("name", "张三"); jsonObject1.put("age", 18); jsonArray.put(jsonObject1); JSONObject jsonObject2 = new JSONObject(); jsonObject2.put("name", "李四"); jsonObject2.put("age", 20); jsonArray.put(jsonObject2); // 输出JSONArray对象 System.out.println(jsonArray); // 获取JSONArray中的JSONObject JSONObject obj = jsonArray.getJSONObject(0); System.out.println(obj.getString("name") + " " + obj.getInt("age")); // 遍历JSONArray中的所有JSONObject for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); System.out.println(jsonObject.getString("name") + " " + jsonObject.getInt("age")); } } } ``` 在这个示例中,我们创建了一个JSONArray对象,并向其中添加了两个JSONObject对象。然后我们展示了如何获取JSONArray中的JSONObject,以及如何遍历JSONArray中的所有JSONObject。运行这个示例代码,输出结果如下: ``` [{"name":"张三","age":18},{"name":"李四","age":20}] 张三 18 张三 18 李四 20 ``` 从输出结果可以看出,我们成功地创建了一个JSONArray对象,并且成功地向其中添加了两个JSONObject对象。同时,我们也成功地获取了JSONArray中的JSONObject,以及遍历了JSONArray中的所有JSONObject。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值