首页 > 其他分享 >JSON 现代数据交换的利器

JSON 现代数据交换的利器

时间:2024-05-29 12:28:44浏览次数:32  
标签:obj object json 利器 JSON str 字符串 数据交换

JSON(JavaScript object Notation)是一种轻量级的数据交换格式,具有易读易写的特点。它由键值对组成,并且支持嵌套、数组等复杂的数据结构。

JSON的起源与发展

JSON的起源可以追溯到2001年,由道格拉斯·克罗克福特(Douglas Crockford)提出并定义。他设计JSON的初衷是创建一种轻量级、易于阅读和编写的数据交换格式,用于在不同系统之间进行数据交换。JSON的灵感来自于JavaScript对象字面量表示法,因此具有与之相似的语法结构,这也使得JSON与JavaScript语言天然地契合。

随着Web应用的迅速发展,JSON逐渐成为了Web开发中最常用的数据交换格式之一。其简洁、易读的特性,使得它在前后端数据传输以及API接口设计中得到了广泛的应用。同时,JSON也逐渐走出了Web开发领域,被用于移动应用、物联网、大数据等各个领域中。


JSON的结构

JSON 格式的语法要求相对简单,主要包括以下几个方面:

{
  "name": "czwrgz",
  "age": 20,
  "city": "Shang hai",
  "money": null,
  "isStudent": true,
  "hobbies": ["basketball", "x"],
  "address": {
    "street": "****",
    "city": "DQ"
  }
}

1、键值对(Key-Value Pair)

  • JSON中的数据是以键值对的形式存在的,即一个键对应一个值
  • 键和值之间使用冒号(:)进行分隔,键值对之间使用逗号(,)进行分隔
  • 键必须是字符串,而值可以是字符串、数字、布尔值、数组、对象等数据类型

2、对象(object)

  • JSON中的对象是由一对花括号{}包裹起来的
  • 对象中的数据以键值对的形式存储,键和值之间使用冒号(:)进行分隔,键值对之间使用逗号(,)进行分隔
  • 键是字符串,值可以是字符串、数字、布尔值、数组、对象等类型

3、数组(Array)

  • JSON中的数组是由一对方括号[]包裹起来的
  • 数组中的数据是按照顺序排列的,使用逗号(,)进行分隔
  • 数组中的元素可以是字符串、数字、布尔值、数组、对象等类型的数据

4、字符串(String)

  • JSON中的字符串是由双引号(" ")包裹起来的
  • 字符串可以包含任意字符,包括字母、数字、特殊字符

5、数字(Number)

  • JSON中的数字可以是整数或浮点数,可以包含正负号
  • JSON中的数字支持特殊格式,例如:十六进制、八进制

6、布尔值(Boolean)

  • JSON中的布尔值只有两种取值,true 和 false

7、空值(Null)

  • JSON中的空值用null表示,表示一个空对象、数组或变量

8、注释:JSON不支持注释,无法在JSON中添加注释


各个语言与JSON之间进行转换

将数据从不同编程语言转换为 JSON 格式,或者将 JSON 数据转换为不同编程语言的数据结构,通常需要使用各种编程语言提供的 JSON 解析和序列化库。以下是一些常见语言的示例:

1、Python:

  • 将Python对象转换为JSON

import json

# Python 对象
python_obj = {"name": "czwrgz", "age": 20, "city": "Shang hai"}

# 转换为 JSON 字符串
json_str = json.dumps(python_obj)

print(json_str)
  • 将JSON字符串转换为Python对象

import json

# JSON 字符串
json_str = '{"name": "czwrgz", "age": 20, "city": "Shang hai"}'

# 转换为 Python 对象
python_obj = json.loads(json_str)

print(python_obj)

2、JavaScript:

  • 将JavaScript对象转换为JSON

// JavaScript 对象
var javascript_obj = {name: "czwrgz", age: 20, city: "Shang hai"};

// 转换为 JSON 字符串
var json_str = JSON.stringify(javascript_obj);

console.log(json_str);
  • 将JSON字符串转换为JavaScript对象

// JSON 字符串
var json_str = '{"name": "czwrgz", "age": 20, "city": "Shang hai"}';

// 转换为 JavaScript 对象
var javascript_obj = JSON.parse(json_str);

console.log(javascript_obj);

3、C:

在C当中可以使用json-c库来处理JSON数据

  • 将C对象转换为JSON:

#include <stdio.h>
#include <json-c/json.h>

int main() {
    // 创建 JSON 对象
    json_object *json_obj = json_object_new_object();
    
    // 添加键值对到 JSON 对象中
    json_object_object_add(json_obj, "name", json_object_new_string("czwrgz"));
    json_object_object_add(json_obj, "age", json_object_new_int(20));
    json_object_object_add(json_obj, "city", json_object_new_string("Shang hai"));
    
    // 将 JSON 对象转换为字符串
    const char *json_str = json_object_to_json_string(json_obj);
    printf("JSON 数据: %s\n", json_str);
    
    // 解析 JSON 字符串
    json_object *parsed_json = json_tokener_parse(json_str);
    
    // 从解析后的 JSON 对象中获取数据
    json_object *name_obj, *age_obj, *city_obj;
    json_object_object_get_ex(parsed_json, "name", &name_obj);
    json_object_object_get_ex(parsed_json, "age", &age_obj);
    json_object_object_get_ex(parsed_json, "city", &city_obj);
    
    // 打印解析后的数据
    printf("解析后的数据:\n");
    printf("Name: %s\n", json_object_get_string(name_obj));
    printf("Age: %d\n", json_object_get_int(age_obj));
    printf("City: %s\n", json_object_get_string(city_obj));
    
    // 释放内存
    json_object_put(json_obj);
    json_object_put(parsed_json);
    
    return 0;
}
  • 将JSON字符串转换为JavaScript对象

#include <stdio.h>
#include <json-c/json.h>

int main() {
    // 假设我们有一个包含JSON数据的字符串
    const char *json_str = "{\"name\": \"czwrgz\", \"age\": 20, \"city\": \"Shang hai\"}";
    
    // 使用json-c库解析JSON字符串
    json_object *json_obj = json_tokener_parse(json_str);
    
    // 从JSON对象中获取数据
    json_object *name_obj, *age_obj, *city_obj;
    json_object_object_get_ex(json_obj, "name", &name_obj);
    json_object_object_get_ex(json_obj, "age", &age_obj);
    json_object_object_get_ex(json_obj, "city", &city_obj);
    
    // 将JSON数据转换为C语言中的数据
    const char *name = json_object_get_string(name_obj);
    int age = json_object_get_int(age_obj);
    const char *city = json_object_get_string(city_obj);
    
    // 打印转换后的数据
    printf("Name: %s\n", name);
    printf("Age: %d\n", age);
    printf("City: %s\n", city);
    
    // 释放JSON对象的内存
    json_object_put(json_obj);
    
    return 0;
}

4、Java:

在java当中可以使用org.json库或者更高效的第三方库,例如Gson或者Jackson来处理JSON数据

  • 使用Gson库将Java对象转换为JSON:

import com.google.gson.Gson;

// Java 对象
Person person = new Person("czwrgz", 20, "Shang hai");

// 使用 Gson 将 Java 对象转换为 JSON 字符串
Gson gson = new Gson();
String json_str = gson.toJson(person);

System.out.println(json_str);
  • 使用Gson库将JSON字符串转换为Java对象:

import com.google.gson.Gson;

// JSON 字符串
String json_str = "{\"name\": \"czwrgz\", \"age\": 20, \"city\": \"Shang hai\"}";

// 使用 Gson 将 JSON 字符串转换为 Java 对象
Gson gson = new Gson();
Person person = gson.fromJson(json_str, Person.class);

System.out.println(person.getName());

5、C#:

在C#中可以使用System.Text.Json 或者 Newtonsoft.Json(Json.NET)库来处理JSON

  • 使用System.Text.Json库将C#对象转换为JSON对象:

using System.Text.Json;

// C# 对象
var person = new { Name = "czwrgz", Age = 20, City = "Shang hai" };

// 使用 System.Text.Json 将 C# 对象转换为 JSON 字符串
string json_str = JsonSerializer.Serialize(person);

Console.WriteLine(json_str);
  • 使用System.Text.Json库将JSON字符串转换为C#对象:

using System.Text.Json;

// JSON 字符串
string json_str = "{\"Name\": \"czwrgz\", \"Age\": 20, \"City\": \"Shang hai\"}";

// 使用 System.Text.Json 将 JSON 字符串转换为 C# 对象
var person = JsonSerializer.Deserialize<Person>(json_str);

Console.WriteLine(person.Name);

JSON与XML

JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)都是用于数据交换的格式,但在结构和使用上有很大的不同。

JSON:

结构简洁JSON 使用简洁的键值对(key-value pairs)的结构表示数据
易于阅读和编写JSON 对人类来说比较易读,因为它的结构类似于 JavaScript 对象字面量
数据类型支持字符串、数字、布尔值、数组、对象和 null
使用范围JSON 在 Web 开发中得到广泛应用,特别是在与 JavaScript 后端交互时

XML:

结构复杂XML 使用标签(tags)的层次结构来表示数据,这些标签可以包含属性和子元素
通用性XML 不限于特定的语言或技术,因此在各种环境中被广泛使用
数据类型XML 可以描述更复杂的数据类型,例如日期、时间和自定义数据类型
扩展性XML 是可扩展的,可以通过定义自定义标签和数据结构来满足特定需求

两者之间的比较

  1. JSON 的结构相对更简单,因为它使用键值对表示数据,而 XML 使用标签的层次结构
  2. JSON 通常比 XML 更小,因为它的语法更简洁
  3. JSON 对于人类来说通常更易读和理解,因为它的语法更接近常规的编程语言
  4. 由于其简单的结构,JSON 的解析速度通常比 XML 更快
  5. XML 比 JSON 更灵活,因为它可以描述更多种类的数据类型和结构

选择使用 JSON 还是 XML 取决于具体的应用场景、需求和个人偏好。在大多数现代应用程序中,JSON 更为流行和常见,尤其是在 Web 开发领域。


JSON的应用

1、Web开发:

        在Web开发中,JSON广泛用于前后端数据传输以及API接口设计。前端通过AJAX请求获取JSON格式的数据,然后将其解析并展示在网页上。后端则通常会将数据库查询结果或其他数据转换为JSON格式,以便前端进行处理和展示

2、移动应用:

        移动应用通常需要与服务器进行数据交换,而JSON的简洁性和灵活性使得它成为了移动应用开发中常用的数据格式。移动应用可以通过HTTP请求获取JSON数据,然后解析并用于展示、缓存或其他操作

3、物联网:

        物联网设备可以将采集到的数据转换为JSON格式,然后通过网络传输给其他设备或服务器进行处理

4、大数据:

        大数据系统通常需要处理各种类型的数据,而JSON的灵活性使得它能够很好地适应不同类型的数据。大数据系统可以将数据转换为JSON格式进行存储和处理,然后根据需要进行查询、分析或其他操作

标签:obj,object,json,利器,JSON,str,字符串,数据交换
From: https://blog.csdn.net/m0_74995879/article/details/139273525

相关文章

  • ts拯救前端:优雅的在运行时校验后端接口返回数据类型 typescript-json-schema+ ajv
    包管理器:pnpm环境:node依赖:typescript-json-schema、ajv准备工作1、安装依赖pnpmaddtypescript-json-schemapnpmaddajv2、准备需要校验的数据类型//userType.tsexportinterfaceUser{id:string;token:string;nick?:string;}3、使用typescrip......
  • SQLServer2022新特性JSON_OBJECT从零个或多个表达式中构造JSON对象
    SQLServer2022新特性JSON_OBJECT从零个或多个表达式中构造JSON对象文本参考中文官方文档https://learn.microsoft.com/zh-cn/sql/t-sql/functions/json-object-transact-sql?view=sql-server-ver16参考英文文官方文档https://learn.microsoft.com/en-us/sql/t-sql/fun......
  • Python网络爬虫的时候json=就是让你少写个json.dumps()
    大家好,我是皮皮。一、前言前几天在Python白银交流群【空翼】问了一个Python网络爬虫的问题,提问截图如下:登录请求地址是这个:二、实现过程这里【甯同学】给了一个提示,如下所示:估计很多小伙伴和我一样会有一个疑问吧,为啥这次要用json=data啊?因为请求头的content-type这里对......
  • 二次元ai绘画图片软件哪个好?试试这些图片创作利器
    画画一直是许多人的爱好。可对于没有学过的人来说,将想象中的画面呈现出来并不容易。长时间的绘画练习让很多人望而却步,直到ai绘画功能的出现,让人们有了新的途径。即使是没有基础的人,也可以轻松地将自己的想象转化为美丽的画作,这激发了更多人对于绘画的热情。想知道这种ai绘画......
  • XML和JSON的区别
    XML(ExtensibleMarkupLanguage)和JSON(JavaScriptObjectNotation)都是常见的数据交换格式,但它们有以下几点主要区别:1:语法结构:XML是一种基于标签的标记语言,数据包裹在开始标签和结束标签中,如<person><name>John</name><age>30</age></person>。JSON是一......
  • 如何实时掌握手机号状态的API利器分析
    在移动互联网的时代,手机号码不仅是通信的连接点,也是用户身份的关键识别。手机状态查询API通过提供实时的手机号码状态查询服务,协助企业和组织更有效地管理用户信息,提升服务流程。手机状态查询API通过与电信运营商的数据库进行请求,从而获取手机号码的当前状态。用户可通过以......
  • Mybatis-Plus 实现 jsonb类型的数据存取
    1、自定义类型处理器importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.serializer.SerializerFeature;importorg.apache.ibatis.type.BaseTypeHandler;importorg.apache.ibatis.type.JdbcType;importorg.postgresql.util.PGobject;importjava.sql.Calla......
  • notepad++ 将JSON压缩成一行与JSON格式化
    参考文档:https://blog.csdn.net/weixin_43684328/article/details/109528085实际只有两部:第一步: 第二步:  ####################下面是转发参考的内容#######################无需插件,正则替换即可如果json中含有空格不想替换时可以分别替换回车和制表符{"DAT......
  • json-server 快速搭建接口服务 使用教程
    json-server是一款小巧的接口模拟工具,一分钟内就能搭建一套Restful风格的API,尤其适合前端接口测试使用。只需指定一个json文件作为api的数据源即可,使用起来非常方便,30秒入门。进阶操作还支持分页,排序等操作,非常方便!开源地址主页地址:https://www.npmjs.com/package/js......
  • JSON里包含的数组中的值 (List数组或对象)转换出来并读取, 通过 hutool 中的API 方法
    hutool 是一个Java工具包,它提供了很多实用的功能,包括JSON的处理。在 hutool 中,你可以使用 cn.hutool.json.JSONUtil 类来解析和处理JSON数据。如果你想要获取JSON中的数组(JSONArray),并遍历读取其中的值(无论是基本类型还是对象),你可以按照以下步骤操作:首先,确保你的项目......