一、简介
JSON:JavaScript对象表示法(JavaScript object Notation)
JSON是存储和文本交换信息的语法
JSON是轻量级的文本数据交换格式
JSON独立于语言和平台
JSON具有自我描述性,更易理解
二、与XML相比
JSON类似于XML,但比XML更小、更快、更易解析
没有结束标签、更短、读写速度更快、使用数组、不使用保留字
缺点:
必须使用Unicode字符集,受约束性较强
必须遵循JSON的四个基本原则
使用场景:
适合数据量大,不要求保留原有数据类型的情况下使用
三、JSON语法
1、JSON语法是JavaScript对象表示法语法的子集
·数据在名称/值对中
·数据有逗号分隔
·花括号保存对象
·方括号保存数组
2、JSON的值可以是
·数字(整数或浮点数)
·字符串(在双引号中)
·逻辑值(true或false)
·数组(在方括号中)
·对象(在花括号中)
·null
如:{"firstName":"John","lastName":"Doe"}
四、使用Java解析Json文件
下载 gson.jar包
读取文件
JsonParser parser = new JsonParser();
JsonObject object = (JsonObject) parser .parse(new FileReader( "src/test.json"));
System.out .println("cat=" +object .get("cat" ).getAsString());
System.out .println("pop=" +object .get("pop" ).getAsBoolean());
JsonArray array = object .get("language" ).getAsJsonArray();
for (int i = 0;i <array .size();i ++){
System. out .println("----------------" );
JsonObject subObject = array .get(i ).getAsJsonObject();
System. out.println( "id="+ subObject .get("id" ).getAsInt());
System. out.println( "name="+ subObject .get("name" ).getAsString());
System. out.println( "ide="+ subObject .get("ide" ).getAsString());
}
创建文件
JsonObject object = new JsonObject();
object.addProperty( "cat" , "it" );
JsonArray array = new JsonArray();
JsonObject lan1 = new JsonObject();
lan1.addProperty( "id" , 1);
lan1.addProperty( "name" , "java" );
lan1.addProperty( "ide" , "Eclipse" );
array.add( lan1);
JsonObject lan2 = new JsonObject();
lan2.addProperty( "id" , 2);
lan2.addProperty( "name" , "Swift" );
lan2.addProperty( "ide" , "XCode" );
array.add( lan2);
JsonObject lan3 = new JsonObject();
lan3.addProperty( "id" , 3);
lan3.addProperty( "name" , "C#" );
lan3.addProperty( "ide" , "Visual Studio" );
array.add( lan3);
object.add( "language" , array );
object.addProperty( "pop" , true );
System. out .println(object .toString());
五、一个重要思想
在编程过程中,遇到错误了,遇到非预期的结果了,不要急着去猜,去试来找出错误
这是一种极其浪费精力的低级debug的错误方法
要理清脉络,从根源思考清楚出错的逻辑是什么,这样才能加深理解,在以后的工作中避免更多错误
六、一个小补充
所有编程语言的开发都离不开三种数据类型
1、 标量(Scalar) 一个单独的字符串
2、 序列(sequence) 如数组或列表
3、 映射(mapping) 名/值 如散列或字典