JAVA解析JSON常用方法及注意事项

JSON:JavaScript 对象表示法(JavaScript Object Notation)。

分享一个: 在线的json解析器
再分享一个: w3c json教程地址


json支持的数据类型:
   - Number  数字型(整数或浮点数)
   - String   字符串型(在双引号中)
   - Boolean  布尔型(true 或 false)
   - Object   对象(在花括号中,元素之间以逗号分隔) {“name”:”adf”,”age”:”123”}
   - Array    数组 (在方括号中,元素之间以逗号分隔) [“1”,”2”,”3”]
   - null    空值
  
  ps:Object表示对象,类似于C语言中的结构体,以花括号”{}”括起来,其元素要求为键值对,key必须为String类型的,而value则可为任意类型。key和value之间以” : “表示映射关系。


市面上最常见的三种解析json的方式

    <!-- 普通 json  jar包 -->
    <!-- https://mvnrepository.com/artifact/org.json/json -->
    <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20160810</version>
    </dependency>
    <!-- 阿里 fastjson jar包 -->
    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.47</version>
    </dependency>
    <!-- 谷歌 gjson jar包 -->
    <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.2</version>
    </dependency>

关于 org.json

// -------JSONObject 初始化 -------
//方式一:
JSONObject obj = new JSONObject();
obj.put("name", "John");
obj.put("sex", "16");
//方式二:
Student stu = new Student();
stu.setAge("123");
stu.setName("adf");
JSONObject json = new JSONObject(stu);
//方式三:
Map<String,String> map = new HashMap<String ,String>();
map.put("a","1");
map.put("b","2");
JSONObject jsonMap = new JSONObject(map);
System.out.println(jsonMap);
//方式四:
String str = "{'name':'adf','age':'123'}";
JSONObject jsonStr = new JSONObject(str);
System.out.println(jsonStr);


//------- 一些简单常用的方法 -------

//put 和 accumulate
JSONObject obj = new JSONObject();
obj.put("name", "John");
obj.accumulate("sex","11");
System.out.println(obj);

obj.accumulate("sex","22");
obj.put("name", "Aili");
System.out.println(obj);
//输出结果
//{"sex":"11","name":"John"}
//{"sex":["11","22"],"name":"Aili"}
//put会取代旧值,accumulate会在旧值的基础上将value追加成数组

//append
//在值为数组的基础上追加,value类型不是数组会报错
obj.append("sex","33");

//optString 和 getString
//当key不存在时,optString会返回一个空字符串或者返回你指定的默认值,getString会报JSONException异常:org.json.JSONException: JSONObject["xxx"] not found.
JSONObject json = new JSONObject();
String str=json.optString (key);  //key不存在会返回null。
String str=json.optString (key,fallback);  //key不存在会返回指定默认值fallback。
//看到方法的返回值想必就理解怎么使用了吧,getString这个方法获取key对应的value值时必须保证value是String类型的否则报错
Object age = json.get("age");
String age1 = json.getString("age");
String age2 = json.optString("age");
Object age3 = json.opt("age");

//toJSONArray 
//如果你想将JSONObject所有或者指定value转换成JSONArray,这个方法再合适不过了
//新建JSONArray,JSONArray里的值对应JSONObject的key即可,对应不上的会添加null
JSONObject obj = new JSONObject();
obj.put("name", "John");
obj.accumulate("sex","11");
System.out.println(obj);

JSONArray arr = new JSONArray();
arr.put("name");
arr.put("sex");
JSONArray objects = obj.toJSONArray(arr);
System.out.println(objects);

//getJSONArray 和 getJSONObject
//使用的前提对应value的类型要对应上
//如果只是简单的获取值建议用上边提到的get和opt系列即可,获取值后要进一步对JSONArray和JSONObject操作才建议使用这两个方法,毕竟达到的效果是一样的
JSONArray jsonArray = obj.getJSONArray("hobbies");
JSONObject jsonObject = obj.getJSONObject("stu");

关于 fastjson

//------- 初始化 -------
//方式一:
JSONObject obj = new JSONObject();
obj.put("name", "John");
obj.put("sex", "John");
System.out.println(obj);
//方式二:默认为false内部维护HashMap,当为true时维护LinkedHashMap,输出时按put顺序输出
JSONObject objOrder = new JSONObject(true);
objOrder.put("name", "John");
objOrder.put("sex", "16");
System.out.println(objOrder);
//方式三:因为内部维护的是Map,所以初始化不能直接使用对象
Map<String,Object> map = new HashMap<String ,Object>();
map.put("a","1");
map.put("b","2");
JSONObject jsonMap = new JSONObject(map);
System.out.println(jsonMap);
//方式四:
String str = "{'username':'John','password':'123'}";
JSONObject json = JSONObject.parseObject(str);
System.out.println(json);


//------- 一些简单常用的方法 -------
//因为内部维护的是Map所以一些方法的使用和操作Map会比较像

//get
//key存在则返回对应值,不存在返回空
JSONObject obj = new JSONObject();
obj.put("name", "John");
Object name = obj.get("name");
Object age = obj.get("age");
System.out.println(name);
System.out.println(age);

//getJSONArray 和 getJSONObject 
//和之前提到的一样,value类型不对会报语法错:syntax error
JSONArray jsonArray = obj.getJSONArray("name");
JSONObject jsonObject = obj.getJSONObject("name");

//get:允许key不是String类型,查不到返回null
//getString:key必须为String类型,查不到返回null
//getObject:第二个参数可选,意思为将查出来的value进行类型转换,查不到返回null
Object sex = obj.get(12);
String string = obj.getString("name");
Double sex1 = obj.getObject("sex", Double.class);

//put:一次加一个,存在则返回旧值,取代旧值添加,不存在就返回null,添加
//putIfAbsent:存在则返回旧值,不添加,不存在就返回null,添加
//putAll:一次允许加多个
JSONObject obj = new JSONObject();
obj.put("name","Json");
Object o1 = obj.putIfAbsent("name", "Tom");
Map<String,Object > map = new HashMap<String,Object>();
map.put("1","1");
map.put("2","2");
obj.putAll(map);

//fluentPut 和 fluentPutAll 
//从源码中看和上边提到的 put 和 putAll 没什么区别只是方法返回值不同
JSONObject jsonObject = obj.fluentPut("zxc", "zxc");
System.out.println(obj);
HashMap map = new HashMap<String,Object>();
map.put("1","1");
map.put("2","2");
JSONObject jsonObject2 = obj.fluentPutAll(map);

关于 gjson

//------- 初始化 -------

//方式一:只有一个无参构造方法
JsonObject json = new JsonObject();
json.addProperty("name", "John");
json.addProperty("sex", "John");
System.out.println(obj);

//------- 一些简单常用的方法 -------
//内部维护:LinkedTreeMap 所以会有一些节点的概念

//addProperty 
//添加值
JsonObject json = new JsonObject();
json.addProperty("name","John");

//get 
//获取值,返回对象是JsonElement 
JsonElement qwe = json.get("name");
System.out.println(qwe);

今天就到这里了,有哪些地方没有写到的或者有错误和疑问的欢迎下方留言,会在看到消息第一时间答复,谢谢

### 回答1: 解析 XMind 格式文件并将其转换为 JSON 格式需要以下步骤: 1. 使用 Java 代码读取 XMind 格式文件的内容。 2. 将读取的内容解析为树形结构。 3. 遍历树形结构,并将其转换为 JSON 格式。 以下是一个基本的 Java 代码示例,用于解析 XMind 格式文件并将其转换为 JSON 格式。这个示例代码仅仅实现了根节点的解析,你需要根据你的需求扩展它。 ```java import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import org.xmind.core.Core; import org.xmind.core.IWorkbook; import org.xmind.core.util.FileUtils; import org.xmind.core.util.IProgressReporter; import org.xmind.core.util.ProgressMonitor; import org.xmind.core.util.SafeRunner; import org.xmind.core.util.SizedInputStream; import org.xmind.core.util.XmindUtils; import org.json.JSONObject; public class XMindToJson { public static void main(String[] args) throws Exception { String xmindPath = "path/to/xmind/file.xmind"; String jsonPath = "path/to/json/file.json"; InputStream is = new FileInputStream(new File(xmindPath)); SizedInputStream sis = new SizedInputStream(is); Map<String, String> options = new HashMap<String, String>(); IWorkbook workbook = Core.getWorkbookBuilder().loadFromStream(sis, options, new ProgressMonitor()); JSONObject json = toJSON(workbook); FileUtils.write(new File(jsonPath), json.toString()); } public static JSONObject toJSON(IWorkbook workbook) { JSONObject json = new JSONObject(); json.put("title", workbook.getPrimarySheet().getRootTopic().getTitleText()); return json; } } ``` 这段代码中,我们使用 `org.xmind.core` 包中的类来读取和解析 XMind 文件。通过使用 `IWorkbook` 接口中的方法,我们可以获取到文件的根节点,并将其转换为 JSON 格式。对于这个示例,我们仅仅获取了根节点的标题。 需要注意的是,这段代码并没有考虑兼容旧版 XMind8 文件的问题。如果你需要兼容旧版 XMind8 文件,请使用 `org.xmind.ui.mindmap.MindMapImporter` 类来读取和解析 XMind 文件。这个类会自动根据文件版本来选择合适的解析方式。 ### 回答2: 使用Java代码实现XMind格式文件解析JSON格式需要以下步骤: 1. 解析XMind文件:首先,我们需要读取XMind格式文件的内容。可以使用Java提供的文件读取功能,将XMind文件读取为字节流或字符流。 2. 解析旧版XMind8文件:XMind8文件采用不同的文件格式,需要单独解析。可以通过检测文件头部,判断文件是XMind格式还是XMind8格式,并进行相应的解析处理。 3. 解析内容:根据XMind格式的规则,解析文件的内容并构建出对应的树状结构。XMind文件根据思维导图的层级结构,包括主题、子主题和附件等。 4. 构建JSON对象:根据解析出的内容,构建对应的JSON对象。可以使用Java中的JSON库,如Jackson或Gson库,将解析出的内容转换为JSON格式。 5. 输出JSON数据:将构建好的JSON对象输出为字符串,并保存为JSON格式文件或通过网络传输。 综上所述,以上步骤就是使用Java代码实现XMind格式文件解析JSON格式的大致流程。具体实现时可以参考相关的Java文件读取和处理XML的技术文档,以及JSON库的使用方式。 ### 回答3: 要使用Java代码将XMind格式文件解析JSON格式,包括兼容旧版XMind 8文件,可以使用以下步骤: 1. 首先,需要导入相关的Java库,例如JSON库和XMind库。你可以使用Maven或Gradle添加所需的库依赖。 2. 接下来,需要创建一个方法解析XMind文件。这个方法会接收一个XMind文件路径作为输入,并返回解析后的JSON数据。方法的大致逻辑如下: - 首先,读取XMind文件,并将其加载到一个XMind的对象中。可以使用XMind库中的相关类和方法来实现这一步骤。 - 接下来,遍历XMind对象的内容,包括主题、子主题和连接线等。使用XMind库中的相关类和方法来获取这些内容。 - 在遍历过程中,将获取的内容转换为JSON格式的数据。你可以使用Java中的JSONObject和JSONArray类来创建和组织JSON数据。 - 最后,将转换后的JSON数据返回。 3. 对于兼容旧版XMind 8文件,可以根据XMind 8文件的结构进行相应的处理。可以使用相同的代码逻辑来解析XMind 8文件,只需根据XMind 8文件的特点进行适当的调整。 注意事项: - 需要了解XMind的文件格式和结构,以便正确解析相应的内容。 - 需要仔细阅读XMind库的文档,了解如何使用库中的类和方法来处理XMind文件。 - 需要对JSON格式有一定的了解,以便正确地将内容转换为JSON数据。 这是一个简单的描述,实际实现过程可能会涉及更多细节和代码。你可以参考XMind库的文档和示例代码来更详细地了解如何实现这个功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值