Json专题之--数据类型转换

news/2024/10/22 7:21:43/

目录

一、什么是JSON

二、String转json,json转String

1、使用Jackson库:

2、使用Gson库:

3、使用JSON.simple库:

4、使用 Fastjson

1、将字符串转换为JSON对象

2、将JSON对象转换为字符串:

三、如何实现 将 string存储的 json 转换为键值对形式

1、使用Jackson库:

   另一种 jackson 方式

2、使用Gson库:

3、使用JSON.simple库:


一、什么是JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于在不同系统之间传递和存储数据。它使用简洁的文本格式来表示结构化数据,易于阅读和编写,并且可以通过多种编程语言进行解析和生成。

JSON由键值对组成,使用大括号 {} 表示对象,对象中的键和值之间使用冒号 : 分隔,键值对之间使用逗号 , 分隔。值可以是字符串、数字、布尔值、数组、对象或者null下面是一个简单的JSON示例:

{"name": "LoneRanger","age": 23,"city": "xxx","isStudent": false,"hobbies": ["coding", "swimming", "traveling"],"address": {"street": "123","city": "xxx","country": "CN"}
}

二、String转json,json转String

要将字符串转换为JSON对象,你可以使用各种JSON库中提供的方法。以下是使用Jackson、Gson和JSON.simple这三个常见的JSON库进行示例的代码:

1、使用Jackson库:

String jsonString = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";ObjectMapper objectMapper = new ObjectMapper();Object json = objectMapper.readValue(jsonString, Object.class);

2、使用Gson库:

 String jsonString = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";Gson gson = new Gson();Object json = gson.fromJson(jsonString, Object.class);// 输出JSON对象System.out.println(json);

3、使用JSON.simple库:

  String jsonString = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";JSONParser parser = new JSONParser();JSONObject json = (JSONObject) parser.parse(jsonString);// 输出JSON对象System.out.println(json);

4、使用 Fastjson

        使用Fastjson库,你可以很方便地将字符串和JSON相互转换。下面是使用Fastjson库进行字符串和JSON之间转换的示例代码:

1、将字符串转换为JSON对象

  JSONObject json = JSON.parseObject(jsonString);

在上面的代码中,我们使用JSON.parseObject()方法将字符串解析为Fastjson的 JSONObject对象。

2、将JSON对象转换为字符串:

JSONObject json = new JSONObject();json.put("name", "John");json.put("age", 30);json.put("city", "New York");String jsonString = JSON.toJSONString(json);

在上面的代码中,我们使用JSON.toJSONString()方法将Fastjson的JSONObject对象转换为字符串。

三、如何实现 将 string存储的 json 转换为键值对形式

要在Java中将存储为字符串的JSON转换为键值对形式,你可以使用 JSON库,例如Jackson、Gson或JSON.simple。下面是使用这些库的示例代码:

1、使用Jackson库:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;public class JsonToMapConverter {public static void main(String[] args) {String jsonString = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";try {ObjectMapper objectMapper = new ObjectMapper();JsonNode jsonNode = objectMapper.readTree(jsonString);Map<String, Object> keyValueMap = new HashMap<>();Iterator<Map.Entry<String, JsonNode>> fields = jsonNode.fields();while (fields.hasNext()) {Map.Entry<String, JsonNode> entry = fields.next();String key = entry.getKey();JsonNode valueNode = entry.getValue();Object value = objectMapper.convertValue(valueNode, Object.class);keyValueMap.put(key, value);}// 遍历键值对for (Map.Entry<String, Object> entry : keyValueMap.entrySet()) {String key = entry.getKey();Object value = entry.getValue();System.out.println(key + " = " + value);}} catch (IOException e) {e.printStackTrace();}}
}

   另一种 jackson 方式

String json = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";ObjectMapper objectMapper = new ObjectMapper();Map<String, Object> keyValueMap = objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {});// 遍历键值对for (Map.Entry<String, Object> entry : keyValueMap.entrySet()) {String key = entry.getKey();Object value = entry.getValue();System.out.println("Key: " + key);System.out.println("Value: " + value);}

        在上述代码中,首先定义了一个JSON字符串。然后,使用ObjectMapper类的readValue方法将JSON字符串转换为Map<String, Object>对象。通过遍历这个Map对象的键值对,可以获取键和对应的值,并进行相应的处理。

        需要注意的是,使用readValue方法时,需要通过TypeReference类指定转换的目标类型。在本例中,我们指定了Map<String, Object>作为目标类型。

        这样,JSON字符串就可以转换为键值对形式的数据,可以根据具体的需求进一步处理和操作键值对。

2、使用Gson库:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;import java.util.Map;public class JsonToMapConverter {public static void main(String[] args) {String jsonString = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";Gson gson = new Gson();TypeToken<Map<String, Object>> typeToken = new TypeToken<Map<String, Object>>() {};Map<String, Object> keyValueMap = gson.fromJson(jsonString, typeToken.getType());// 遍历键值对for (Map.Entry<String, Object> entry : keyValueMap.entrySet()) {String key = entry.getKey();Object value = entry.getValue();System.out.println(key + " = " + value);}}
}

3、使用JSON.simple库:

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;import java.util.HashMap;
import java.util.Map;public class JsonToMapConverter {public static void main(String[] args) {String jsonString = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";JSONParser parser = new JSONParser();try {JSONObject jsonObject = (JSONObject) parser.parse(jsonString);Map<String, Object> keyValueMap = new HashMap<>(jsonObject);// 遍历键值对for (Map.Entry<String, Object> entry : keyValueMap.entrySet()) {String key = entry.getKey();Object value = entry.getValue();System.out.println(key + " = " + value);}} catch (ParseException e) {e.printStackTrace();}}
}


http://www.ppmy.cn/news/695531.html

相关文章

手写字符识别

一、手写字符识别原理 以下来源网上。 手写数字识别&#xff0c;可以采用图像识别的方法&#xff0c;左边的x是手写之后的图像&#xff0c;右边的y是对应的数字。 对于图像信息&#xff0c;计算机是用数值来进行表示的&#xff0c;机器学习让计算机具备智能&#xff0c;实际上…

Android studio 手写输入字体,自动识别

效果图 布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"fill_parent"android:layout_height"fill_parent"andr…

快速打开搜狗输入法手写输入(快捷键)

先同时按&#xff1b;X&#xff08;同时按分号键X&#xff09; 然后再按X键

Mac如何设置手写输入?

有的小伙伴在手机上习惯了手写&#xff0c;就跟佐佐提出问题了&#xff0c;到了 Mac 电脑上怎么设置手写输入呢&#xff1f;很多第三方输入法都带有手写输入的功能&#xff0c;其实 Mac 上也自带有手写输入法&#xff0c;利用触控板&#xff0c;可以很方便的实现手写输入&#…

oracle字典在线查字手写,在线字典手写输入

【www.shanpow.com--成语歇后语】 在线字典手写输入篇(一):新华字典手写查字 手写 马的成语 灯谜 疯狂猜成语 【新华字典】可查询汉字20973个,含解释及示例、词性与应用(其中包括3000多个多音字),并可进行“拼音码、五笔码、部首、任意笔画”与汉字互查;支持“同韵字”查询…

电子文档秒变手写文字:这个工具绝了!!

今天给大家带来了一款比较实用的小软件。它能干什么呢&#xff1f;它能让电子文档&#xff08;如word文档等等&#xff09;转换成手写文字图片。 软件名字叫手写模拟器&#xff0c;压缩包大小在59MB左右&#xff0c;免费无广告&#xff0c;是个绿色软件。 软件启动方法很简单&a…

手写.

IOU """ #检测 A: 左下角坐标(left_x,left_y) 右上角坐标(right_x,right_y) B: 左下角坐标(left_x,left_y) 右上角坐标(right_x,right_y) """def IOU(rectangle A, rectangleB):W min(A.right_x, B.right_x) - max(A.left_x, B.left_x)H min(…

android 输入法(包括手写界面)

公司要开发自己的输入法&#xff0c;找了很多例子&#xff0c;都不是自己想要的。android本身的例子不能满足特殊布局的要求&#xff0c;而且没有手写输入&#xff0c;虽然在例子上实现了手写输入但是布局仍然调不好。花了很长时间来分析代码&#xff0c;太累了&#xff0c;决定…