解析JSON(配置文件)

什么是JSON?

       JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,而且它是基于JavaScript的

       JSON 文件的文件类型是 .json,JSON 文本的 MIME 类型是 application/json

JSON的基本形式

       {} 双括号表示对象:对象是一个无序的 “名/值” 对的集合(A collection of name/value pairs),一个对象以 “{” 开始,“}” 结束,每个名称后跟一个":",“名/值”对之间使用“,” 分隔。

       [] 中括号表示数组:值的有序列表(An ordered list of values),一个数组以“[”开始,“]”结束,值之间使用“,”分隔。

       "" 双引号内是属性或值,值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

实例

-- 对象
{"name":"小明","age":"18"}

-- 数组
[{"name":"小明","age":"18"},{"name":"小红","age":"19"}]

-- 嵌套
{"code":"200","msg":"成功","data":{"msg":"ssssss","name":"xxxxxx"}}

{
	"value":"200",
	"data":{"msg":"ssssss","name":"xxxxxx"},
	"result":[
			{"name":"小明","age":"18"},
			{"name":"小红","age":"19"} ]
}

       如果需要生成模拟数据,将数据复制到文本编辑器中,采用全部替换,将"替换为\",这样便可以直接使用。

前端解析JSON

       JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的 API 或工具包。

<script>
	// 将JSON数据赋值给变量
	var str = 
		{ "user": [
  			{ "name":"小明", "age":"18" },
  			{ "name":"小红", "age":"19" }
		] };
		
	// 获取第一条记录的name信息
	str.user[0].name;

	// 修改数据
	str.user[0].name = "小李";
</script>

客户端处理JSON响应

       服务器端返回JSON相应的文本表示,如:

{ "name":"小明", "age":"18" }

       客户端使用 eval()函数 将JSON文本转化为JavaScript对象:

<script>
	// 使用额外的圆括号可使eval()函数将来源输入无条件地视为表达式进行解析
	var resultTmp = eval('(' + request.responseText + ')');
	// 两种方式取得相应的值
	resultTmp.name;
	resultTmp[''+ "name" +''];

	// ajax同理
	$.ajax({
		type : "GET",
	    url : "xxxx?k1=v1",
	    async : false,
	    success : function(data) {
	    	var result = eval('(' + data + ')');
            if (null != result && result != ""){
	        	var info = result['' + "info" + ''];
            }
		}
	});
</script>

Java解析JSON

fastjson方式

       使用 fastjson-x.x.xx.jar,对于方法中根据key获取value时,要注意判断null

方法返回值含义
JSON.parseObject(Strign str)JSONObject对象将json字符串转换为对象
JSONObject对象.getString(“xxx”)返回value值获取对象中的值
如果没有指定的key,则返回null
JSONObject对象.getJSONArray(“xxx”)返回一个JSONArray数组,包含多个JSON对象获取array,需要循环获取数据
不存在则返回null
import java.util.Map;

// fastjson-1.2.51.jar
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class AnalysisFirst {

	/*  第一种:最简易的格式
		{
			"key":"小红",
			"value":"18"
		}
	 */
	public static void format1() {
		String jsonStr = "{\"key\":\"小红\",\"value\":\"18\"}";
		JSONObject jsonObject = JSON.parseObject(jsonStr);
		String key = jsonObject.getString("key");
		String value = jsonObject.getString("value");
		System.out.println(jsonStr); // {"key":"小红","value":"18"}
		System.out.println(key + "    " + value); // 小红    18
	}

	/* 第二种:属性值为json,递归操作即可
		{
			"code":"200",
			"msg":"成功",
			"data":{"msg":"ssssss","name":"xxxxxx"},
			"des":{"id":"1","info":"信息"}
		}
	 */
	public static void format2() {
		String jsonStr = "{\"code\":\"200\",\"msg\":\"成功\",\"data\":{\"msg\":\"ssssss\",\"name\":\"xxxxxx\"},\"des\":{\"id\":\"1\",\"info\":\"信息\"}}";
		System.out.println(jsonStr);  // {"code":"200","msg":"成功","data":{"msg":"ssssss","name":"xxxxxx"},"des":{"id":"1","info":"信息"}}
		JSONObject jsonObject = JSON.parseObject(jsonStr);
		System.out.println(jsonObject.getString("code")); // 200
		System.out.println(jsonObject.getString("msg"));  // 成功
		JSONObject dataObject = JSON.parseObject(jsonObject.getString("data"));
		System.out.println(dataObject.getString("msg")); // ssssss
		// 在获取时需要先判断是否为null,避免出现异常
		System.out.println(dataObject.getString("msg1") == null); // true
		System.out.println(JSON.parseObject(jsonObject.getString("des")).getString("info"));
	}
	
	/* 第三种:属性值为array
		{
			"value":"200",
			"des":{"id":"1","info":"信息"},
			"result":
				[
					{"name":"小明","age":"18"},
					{"name":"小红","age":"19"}
				]
		}
	 */
	public static void format3() {
		String jsonStr = "{\"value\":\"200\",\"data\":{\"msg\":\"ssssss\",\"name\":\"xxxxxx\"},\"result\":[{\"name\":\"小明\",\"age\":\"18\"},{\"name\":\"小红\",\"age\":\"19\"}]}";
		System.out.println(jsonStr);
		JSONObject jsonObject = JSON.parseObject(jsonStr);
		for (Object info : jsonObject.getJSONArray("result")) {
			// 一条具体的json数据
			JSONObject object = (JSONObject)info;
			if(object.get("name") != null){
				System.out.println(object.get("name").toString());
				System.out.println(object.getString("name"));
			}
		}
	}
	
	/* 第四种:直接是array,如果每一个里面又是嵌套,依次解析
		[
			{"name": "小明","age": "18"},
			{"name": "小红","age": "19"}
		]
	 */
	public static void format4() {
		String jsonStr = "[{\"name\":\"小明\",\"age\":\"18\"},{\"name\":\"小红\",\"age\":\"19\"}]";
		System.out.println(jsonStr);
		// 方式一:直接作为JSONArray -> map
		JSONArray jsonArray = JSONArray.parseArray(jsonStr);
		if(null != jsonArray && !jsonArray.isEmpty()) {
			for(int i=0; i<jsonArray.size(); i++) {
				Map map = (Map)jsonArray.get(i);
				System.out.println(map.get("name"));
			}
		}
		// 方式二
		for (Object info : JSONArray.parseArray(jsonStr)) {
			// 一条具体的json数据
			JSONObject object = (JSONObject)info;
			if(object.get("age") != null){
				System.out.println(object.getString("age"));
			}
		}
	}
	
	// 将json解析为JavaBean对象
	public static void toJavaBean() {
		String str = "{\"name\":\"小明\",\"age\":\"18\"}";
		System.out.println(str);
		Student student = new Student();
		try {
			student = JSON.parseObject(str, Student.class);
		} catch (Exception e) {
		    e.printStackTrace();
		}
		System.out.println(student.toString());
	}
}

json-lib方式

       使用json-lib-2.4.jar

import java.util.Map;
// json-lib-2.4.jar
import net.sf.json.JSONObject;

public class JsonTool {
	public static void main(String[] args) {
	
		String jsonStr = "{\"key\":\"小红\",\"value\":\"18\"}";
		JSONObject jsonObject = JSONObject.fromObject(jsonStr);
		String key = jsonObject.getString("key");
		String value = jsonObject.getString("value");
		System.out.println(jsonObject);// {"key":"小红","value":"18"}
		System.out.println(key + "    " + value);// 小红    18

		// 将 Json转换为 Map
		Map<String, Object> jsonToMap = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class);
		System.out.println("将 Json转换为 Map:"+jsonToMap);// 将Json转换为 Map:{value=18, key=小红}
		
		// 将 Json转换为 JavaBean
		jsonStr = "{\"name\":\"小李\",\"age\":\"18\"}";
		JSONObject jsonObject1 = JSONObject.fromObject(jsonStr);
		Student jsonToBean = (Student) JSONObject.toBean(jsonObject1, Student.class);
		System.out.println(jsonToBean.getName()+jsonToBean.getAge());// 小李18
	}
}

android-json方式

       最原始的解析方式,了解即可。

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.alibaba.fastjson.JSON;

public class AnalysisSecond {

	/*
	 * 第一种:最简易的格式 { "key":"小红", "value":"18" }
	 */
	public static void format1() {
		String jsonStr = "{\"key\":\"小红\",\"value\":\"18\"}";
		JSONObject jsonObject;
		try {
			jsonObject = new JSONObject(jsonStr);
			String key = jsonObject.getString("key");
			String value = jsonObject.getString("value");
			System.out.println(jsonStr); // {"key":"小红","value":"18"}
			System.out.println(key + "    " + value); // 小红 18
		} catch (JSONException e) {
			e.printStackTrace();
		}
	}

	/* 第二种:属性值为json,递归操作即可
	{
		"code":"200",
		"msg":"成功",
		"data":{"msg":"ssssss","name":"xxxxxx"},
		"des":{"id":"1","info":"信息"}
	}
	 */
	public static void format2() {
		String jsonStr = "{\"code\":\"200\",\"msg\":\"成功\",\"data\":{\"msg\":\"ssssss\",\"name\":\"xxxxxx\"},\"des\":{\"id\":\"1\",\"info\":\"信息\"}}";
		System.out.println(jsonStr); // {"code":"200","msg":"成功","data":{"msg":"ssssss","name":"xxxxxx"},"des":{"id":"1","info":"信息"}}
		JSONObject jsonObject;
		try {
			jsonObject = new JSONObject(jsonStr);
			System.out.println(jsonObject.getString("code")); // 200
			System.out.println(jsonObject.getString("msg")); // 成功
			JSONObject dataObject = new JSONObject(jsonObject.getString("data"));
			System.out.println(dataObject.getString("msg")); // ssssss
			// 在获取时需要先判断是否为null,避免出现异常
			System.out.println(dataObject.getString("msg1") == null); // true
			System.out.println(JSON.parseObject(jsonObject.getString("des")).getString("info"));
		} catch (JSONException e) {
			e.printStackTrace();
		}
	}

	/*
	 * 第三种:属性值为array { "value":"200", "des":{"id":"1","info":"信息"}, "result": [
	 * {"name":"小明","age":"18"}, {"name":"小红","age":"19"} ] }
	 */
	public static void format3() {
		String jsonStr = "{\"value\":\"200\",\"data\":{\"msg\":\"ssssss\",\"name\":\"xxxxxx\"},\"result\":[{\"name\":\"小明\",\"age\":\"18\"},{\"name\":\"小红\",\"age\":\"19\"}]}";
		System.out.println(jsonStr);
		JSONObject jsonObject;
		try {
			jsonObject = new JSONObject(jsonStr);
			// 返回json的数组
			JSONArray jsonArray = jsonObject.getJSONArray("result");
			for (int i = 0; i < jsonArray.length(); i++) {
				JSONObject object = jsonArray.getJSONObject(i);
				if (object.get("name") != null) {
					System.out.println(object.get("name").toString());
					System.out.println(object.getString("name"));
				}
			}
		} catch (JSONException e) {
			e.printStackTrace();
		}
	}
}

Map,Bean -> JSON

fastjson

       使用 fastjson-x.x.xx.jar

import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;

public class ToJson {
	public static void main(String[] args) {
		// 将Map解析成JSON
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("1", "add");
		map.put("2", "del");
		map.put("3", 520);
		JSONObject jsonMap = new JSONObject(map);
		System.out.println("map:\n"+map);
		System.out.println("JSON:\n"+jsonMap);
		String str = jsonMap.toString();
		System.out.println("String:\n" + str);
	}
}

json-lib

       使用 json-lib-2.4.jar

import java.util.HashMap;
import java.util.Map;
// json-lib-2.4.jar
import net.sf.json.JSONObject;

public class ToJson {

	public static void main(String[] args) {
		
		// 将Map解析成JSON
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("1", "add");
		map.put("2", "del");
		map.put("3", 520);
		JSONObject jsonMap = JSONObject.fromObject(map);
		System.out.println("map:"+map);
		System.out.println("JSON:"+jsonMap);
		
		// 将Bean解析成JSON
		Student student = new Student("小红","18");
		JSONObject jsonBean = JSONObject.fromObject(student);
		System.out.println(jsonBean);// {"age":"18","name":"小红"}
				
		// 嵌套解析成JSON
		Map<String, Object> tempMap = new HashMap<String, Object>();
		tempMap.put("班级", "1班");
		tempMap.put("学生", student);
		JSONObject json = JSONObject.fromObject(tempMap);
		System.out.println(tempMap);
		// {学生=test.constant.json.Student@158c4d4c, 班级=1班}
		System.out.println(json);
		// {"学生":{"age":18,"name":"小红"},"班级":"1班"}
	}
}
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要解析JSON文件,首先需要安装jsoncpp库,可以通过以下命令安装: ``` sudo apt-get install libjsoncpp-dev ``` 安装完毕后,就可以使用jsoncpp库来解析JSON文件了。下面是一个简单的示例程序: ```cpp #include <iostream> #include <fstream> #include <jsoncpp/json/json.h> using namespace std; int main() { ifstream ifs("example.json"); Json::Reader reader; Json::Value root; if (!reader.parse(ifs, root)) { cout << "Failed to parse JSON" << endl; return 1; } string name = root["name"].asString(); int age = root["age"].asInt(); cout << "Name: " << name << endl; cout << "Age: " << age << endl; return 0; } ``` 在这个示例程序中,首先通过ifstream读取example.json文件,然后使用Json::Reader来解析JSON文件,解析结果存放在Json::Value对象root中。可以通过root对象来访问JSON中的数据。 在这个示例程序中,我们访问了JSON中的"name"和"age"字段,并将它们打印出来。 需要注意的是,以上示例程序中的JSON文件格式如下: ```json { "name": "John", "age": 30 } ``` 如果JSON文件的格式不正确,解析过程中可能会出现错误。因此,在实际应用中,需要根据实际情况进行错误处理。 ### 回答2: JSONCpp是一个C++的库,用于解析和生成JSON格式的数据。它提供了一组简单的API来读取和修改JSON数据。 使用JSONCpp解析JSON文件的过程包括以下几个步骤: 1. 引入JSONCpp库:在编程环境中,需要将JSONCpp库文件引入到项目中。可以从JSONCpp的官方网站上下载并配置库文件。 2. 打开JSON文件:使用JSONCpp库中的`Json::CharReader`来打开JSON文件,将其读取为一个字符串。 3. 解析JSON文件:使用JSONCpp库中的`Json::Value`来解析JSON字符串。可以使用`Json::Reader`的`parse()`方法来将JSON字符串转换为`Json::Value`对象。 4. 提取JSON数据:使用`Json::Value`对象的成员访问运算符`[]`来获取JSON数据。可以使用`isMember()`方法判断指定的成员是否存在,使用`asString()`、`asInt()`等方法获取指定成员的值。 5. 遍历JSON数据:如果JSON数据是一个数组类型,可以使用`size()`方法获取数组的长度,使用`operator[]`来访问数组中的元素。 6. 修改JSON数据:使用`Json::Value`对象的成员访问运算符`[]`来修改JSON数据。可以使用`append()`方法向数组类型的JSON数据中添加元素。 7. 保存JSON文件:使用JSONCpp库中的`Json::StyledWriter`对象将`Json::Value`对象转换为字符串,并将其写入文件中。 总结起来,使用JSONCpp解析JSON文件的过程可以归纳为:引入库文件、打开JSON文件、解析JSON文件、提取和操作JSON数据、保存JSON文件。这样就可以实现对JSON文件的读取和解析操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值