Json进一步应用

一.JSON 的两种结构

1.“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表 (hash table),有键列表(keyed list),或者关联数组 (associative array)。 在 Java 语言中,我们可以将它理解成 HashMap。

对象是一个无序的"'名称/值'对"集合。一个对象以"{"(左括号)开始,"}"(右括号)结束。每个“名称”后跟一个":"(冒号);"'名称/值' 对"之间使用","(逗号)分隔。示例:var json = {"name":"Jack","age":90,"Marray":true};


2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(Array 或 List)。数组是值(value)的有序集合。一个数组以"["(左中括号)开始,"]"(右中括号)结束。值之间使用","(逗号)分隔。

示例:var json = ["Jack","Rose","Tom",89,true,false];


Json-lib 是一个 Java 类库(官网:http://json-lib.sourceforge.net/)可以实现如下功能:

       转换 javabeans, maps, collections, java arrays 和 XML 成为 json 格式数据

       转换 json 格式数据成为 javabeans 对象



二. 将 Array,List,Set 解析成 Json 串

package cn.sunzn.json;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import net.sf.json.JSONArray;

public class JsonLib {
   public static void main(String[] args) {
       /**
        * 将 Array 解析成 Json 串
        */
       String[] str = { "Jack", "Tom", "90", "true" };
       JSONArray json = JSONArray.fromObject(str);
       System.err.println(json);

       /**
        * 对像数组,注意数字和布而值
        */
       Object[] o = { "北京", "上海", 89, true, 90.87 };
       json = JSONArray.fromObject(o);
       System.err.println(json);

       /**
        * 使用集合类
        */
       List<String> list = new ArrayList<String>();
       list.add("Jack");
       list.add("Rose");
       json = JSONArray.fromObject(list);
       System.err.println(json);

       /**
        * 使用 set 集
        */
       Set<Object> set = new HashSet<Object>();
       set.add("Hello");
       set.add(true);
       set.add(99);
       json = JSONArray.fromObject(set);
       System.err.println(json);
   }
}

三.将 JavaBean/Map 解析成 JSON 串。 使用JSONObject 解析:

实体类Person

package com.lrq.entity;

public class Person {
	private String ID;
	private String name;
	public Person() {
		
	}
	public Person(String iD, String name) {
		ID = iD;
		this.name = name;
	}
	public String getID() {
		return ID;
	}
	public void setID(String iD) {
		ID = iD;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((ID == null) ? 0 : ID.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (ID == null) {
			if (other.ID != null)
				return false;
		} else if (!ID.equals(other.ID))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	@Override
	public String toString() {
		return "Person [ID=" + ID + ", name=" + name + "]";
	}
	
}

JavaBean/Map解析成Json串

package com.lrq.test;


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


import com.lrq.entity.Person;


import net.sf.json.JSONObject;


public class JsonBean {
	@SuppressWarnings("static-access")
	public static void main(String[] args) {
	       /**
	        * 解析 HashMap
	        */
	       Map<String, Object> map = new HashMap<String, Object>();
	       map.put("name", "朽木白哉");
	       map.put("age", 24);
	       JSONObject jsonObject = JSONObject.fromObject(map);
	       System.out.println(jsonObject);


	       /**
	        * 解析 JavaBean
	        */
	       Person person = new Person("ID001", "SongSong");
	       jsonObject = jsonObject.fromObject(person);
	       System.out.println(jsonObject);


	       /**
	        * 解析嵌套的对象
	        */
	       map.put("person", person);
	       jsonObject = jsonObject.fromObject(map);
	       System.out.println(jsonObject);
	   }
	   
}



结果:



四.使用 JsonConfig 过滤属性:适用于 JavaBean/Map

package com.lrq.test;


import com.lrq.entity.Person;


import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;


public class JsonConfigDemo {
	 public static void main(String[] args) {
	       JsonConfig config = new JsonConfig();
	       config.setExcludes(new String[] { "name" });                      // 指定在转换时不包含哪些属性
	       Person person = new Person("ID001", "SongSong");
	       JSONObject jsonObject = JSONObject.fromObject(person, config);    // 在转换时传入之前的配置对象
	       System.out.println(jsonObject);
	   }
}



测试结果:



五.将 Json串转换成 ObjectArray

package com.lrq.test;
import java.util.Arrays;
import net.sf.json.JSONArray;
public class JsonToArray {
	public static void main(String[] args) {
	       //将JsonArray转化为Object
	       JSONArray jsonArray = JSONArray.fromObject("[89,90,99]");
	       Object array = JSONArray.toArray(jsonArray);
	       System.out.println(array);
	       
	       //将Object强转成 Object数组转List打印输出
	       System.out.println(Arrays.asList((Object[])array));
	   }
	  
}



测试结果:




六.将 Json 串转成 JavaBean/Map:

package com.lrq.test;
import java.util.Map;
import com.lrq.entity.Person;
import net.sf.json.JSONObject;
public class JsonToBeanAndMap {
	@SuppressWarnings("unchecked")
	   public static void main(String[] args) {
	       /**
	        * 将 Json 形式的字符串转换为 Map
	        */
	       String str = "{\"name\":\"Henry\",\"age\":20}";
	       JSONObject jsonObject = JSONObject.fromObject(str);
	       Map<String, Object> map = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class);
	       System.out.println(map);


	       /**
	        * 将 Json 形式的字符串转换为 JavaBean
	        */
	       str = "{\"ID\":\"id001\",\"name\":\"SongSong\"}";
	       jsonObject = JSONObject.fromObject(str);
	       System.out.println(jsonObject);
	       Person person = (Person) JSONObject.toBean(jsonObject, Person.class);
	       System.out.println(person);
	   }
	  
}













  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: MFC是Microsoft Foundation Class的简称,是一套用于开发Windows桌面应用程序的C++类库。处理JSON数据在MFC中可以通过以下几个步骤完成。 首先,需要导入用于处理JSON的类库。MFC本身并不直接提供JSON处理功能,但可以通过第三方库来实现。常用的JSON处理库有jsoncpp、RapidJSON等。你可以根据自己的需求选择一个合适的库,并将其导入到MFC项目中。 其次,需要创建一个JSON对象来表示JSON数据。在导入了JSON库之后,你可以使用该库提供的类或函数来创建一个JSON对象,并通过它来表示和操作JSON数据。你可以使用JSON对象的方法来解析JSON字符串并将其换为JSON对象,或者将JSON对象换为字符串。 接下来,可以使用JSON对象来访问和操作JSON数据JSON对象通常提供了一些方法来访问和操作JSON数据的各个部分。例如,你可以使用JSON对象的方法来获取JSON中的特定字段、数组或嵌套对象,并可以对它们进行增删改查等操作,以满足你的需求。 最后,可以根据需要对处理后的JSON数据进行进一步的操作。一旦你获取了处理后的JSON数据,你可以根据自己的需求对其进行进一步的处理。例如,你可以将JSON数据展示在UI界面上,或者将JSON数据存储到文件中,甚至可以根据JSON数据进行一些业务逻辑的处理。 综上所述,MFC处理JSON数据的一般步骤是导入JSON处理库,创建JSON对象表示JSON数据,通过JSON对象访问和操作JSON数据,并根据需求对处理后的JSON数据进行进一步操作。通过这些步骤,你可以在MFC中有效地处理JSON数据。 ### 回答2: MFC(Microsoft Foundation Classes)是一个用于开发Windows应用程序的C++框架。要处理JSON(JavaScript Object Notation)数据格式,可以借助MFC中的一些类和函数来进行操作。 首先,可以使用CInternetSession类中的OpenURL函数来从网络上获取包含JSON数据的文件。通过发送HTTP请求并接收响应,可以把文件内容读取到一个字符串中。 接下来,可以使用CJsonObject类来解析JSON字符串。这个类提供了一系列函数,让我们可以方便地访问JSON对象的属性和值。比如,可以使用GetString函数来获取字符串类型的值,使用GetInt函数来获取整数类型的值,以此类推。还可以使用GetArray函数来获取一个JSON数组,然后可以对数组中的每个元素进行遍历。 如果需要生成JSON数据,可以使用CJsonObject类的AddMember函数来添加新的属性和值。可以使用GetString函数来将JSON对象换为字符串,然后可以将字符串写入文件或发送给服务器。 另外,MFC还提供了一些用于处理字符串操作的函数。可以使用CString类来存储和处理JSON字符串,使用Find函数来查找指定的字段或值。 总之,通过使用MFC提供的类和函数,可以在C++中方便地处理JSON数据。从网络上获取JSON文件,解析JSON字符串,访问和修改JSON对象,最后将JSON数据换为字符串或文件,再进行相应的操作。这些功能使得MFC成为处理JSON的强大工具之一。 ### 回答3: MFC是微软的一种Windows编程框架,用于创建Windows应用程序。在MFC中处理JSON数据可以通过以下步骤进行: 1. 导入合适的JSON库:MFC本身没有提供处理JSON的功能,但你可以使用第三方的JSON库,比如JsonCpp,来帮助处理JSON数据。首先,你需要将JSON库的头文件和源文件添加到你的MFC项目中。 2. 解析JSON数据:使用JSON库的功能来解析JSON数据。通常,你需要将JSON数据存储在一个字符串中,然后使用JSON库的解析函数将其解析为一个JSON对象或数组。这样,你就可以使用JSON对象的成员函数获取其中的数据。 3. 访问JSON数据:一旦你成功解析了JSON数据,你可以通过JSON对象或数组的成员函数来访问其中的数据。比如,你可以使用成员函数来获取特定的属性值,或遍历数组中的元素。 4. 处理JSON数据:根据你的需求,你可以对JSON数据进行各种操作,比如修改、删除或添加属性值、元素等。你可以使用JSON对象或数组的成员函数来进行这些操作。 5. 生成JSON数据:如果你希望将MFC应用程序中的数据换为JSON格式,你同样可以使用JSON库的功能来生成JSON数据。你可以使用JSON对象或数组的成员函数来添加属性值、元素等,并最终将其换为字符串格式的JSON数据。 综上所述,要在MFC中处理JSON数据,你需要导入合适的JSON库,解析JSON数据,访问和处理JSON数据,以及生成JSON数据。这样,你就可以在你的MFC应用程序中有效地处理JSON数据了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HaleyLiu123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值