欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

json总结

程序员文章站 2022-03-10 08:24:18
...

所谓JSON(JavaScript Object Notation, JS 对象标记) ,它是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据;类似 XML,但是JSON 比 XML 更小、更快,更易解析。

/*************************************************************************
 * File Name: json.c
 * Author:    The answer
 * Function:  Other        
 * Mail:      [email protected] 
 * Created Time: 2017年07月11日 星期二 14时17分35秒
 ************************************************************************/

本文总结自《JSON必知必会》


JSON(JavaScript Object Notation)的全称是:javascript对象表示法

{
    "brand":"adidas",
        "color":"red",
        "price":1222,
        "size":9
}

# 名称--值对    /键值--对 等等.....

json中的值对可以是:strng字符串、数字、null、数组或对象;
Json中”名称“始终都是在左边,而值对是在右边,中间用冒号:来分隔名称和键值;

---------------------------------------------
(2) 名称:"animal" or "the animal"都是合法的,而且中间还可以使用单引号:
 eg: "this's animal":"dog"   --->但是不建议这么的去做,因为这些特殊的字符会影响到
 json对象在系统之间的可移植性;为了提高json数据在各平台间的可移植性,最好不要使用
 空格和特殊字符;
 (3) 注意,名称是必须要用双引号,而值不一定,因为json中的值可以有很多种,比如
 数字、数组、null、bool、而若用的是字符串,则必须用双引号;
 (4) 使用{}来表示使之成为一个对象,json中若有多个"名称--值对"的话,应该用","来
 将其进行分隔;
 (5) json错误验证和校验工具: JSON Formatter & Validator,带高亮语法错误提示;
 JSON Editor Online; JSONLint;
 (6) 专业术语和概念
 字面量:指的是字面意思与其想要表达的意思是完全一致的值。
 (7) 计算机中的数据类型:原始数据类型(基础数据类型)和复合数据类型(派生数据类型)
 (8) json中的数据类型:对象,字符串,数字,数组,null和bool(布尔值)
 (9) json中的数字可以是:整数、小数、负数、指数


 ---------------------------------------------
 (1) json中对象是可以嵌套使用的,eg:
 {
 "Person":{
     "name":"lixiaogang",
         "heigh": 176,
         "head":{
         "hair":{
                 "color":"light blood",
                 "length":"short",
                 "style":"A-line"
             },
             "eyes":"black"
             }
         }
 }


(2) json中的字符串类型可以是由任意的unicode字符构成;
(3) json中有时候"值对"有时候不得不包含着一对"双引号",如:
{
    "promo":"Say "the dog is best" "  //这时候会报错,编译器读到the前面的双引号就会
        //认为Say这个值对已经结束,而后面的是非法,解决方法是使用"\"转业符号;
        "promo":"Say \"the dog is best\" "
}

(4) json中的布尔类型:仅使用小写的字面值 false or true
(5) json中的null类型:若想表达某样东西"无",请使用null并且小写,不要使用0
(6) json中的数组类型:

{
    "appleCarton":[
        "apple",    //一个数组为每一个"位置"都赋予了一个索引,下标0
        "apple",
        "apple",    //若吃掉这个apple,为null,但是为0也不会报错,但不建议这么做
        "apple",
        "apple",
        "apple",
        "apple",
        "apple",
        "apple",
        "apple"
        ]
}

数组里面还可以再嵌套数组;如:
{
    "test":[
        [
            true,
            true,
            true,
            true
        ],
        [
            true,    
            false,    
            true,    
            false,    
        ]
     ]
}

-------------------------------------------------

(1) json中的安全问题
    跨站请求伪造 CSRF
比如:
[
    {
        "username":"user"
    },
    {
        "password":"passwd"    --->容易被攻击-->    黑客绕过<script>标签
    }
]


解决方案:将数组放到一个对象之中,使之成为一个非法的javascript,
          这样就不会被<script>标签加载

I.步

{
    "info":[
    {
        "username":"user"
    },
    {
        "password":"passwd"
    }  
        ]
}

II.步
    仅使用POST请求获取数据,禁止使用GET;POST and GET是HTTP提供的用于与服务器交换
    数据的两种方式;GET用于"请求数据,得到相应";而POST用于"提交数据,得到相应";

    结论:避免资源泄露、窃取: 1.不要在JSON中使用*数组
                               2.不要贪图使用GET来代替POST的便利

(2)注入攻击
     注入攻击包含许多种形式与格式;它们都是利用系统本身的漏洞来实现的;而CSRF则是利用
     信任机制进行的攻击。注入攻击则主要通过向网站注入恶意代码来实现;
(3) 跨站脚步攻击
    XSS是"注入攻击的一种";


---------有关具体的攻击的详细信息和过程,需结合javascript来理解----------