在这篇文章中,我们将为您详细介绍如何在Swift中优雅地处理JSON数据的内容,并且讨论关于swiftuijson的相关问题。此外,我们还会涉及一些关于Ajax&Json4.Json的使用&Ajax与
在这篇文章中,我们将为您详细介绍如何在 Swift 中优雅地处理 JSON 数据的内容,并且讨论关于swiftui json的相关问题。此外,我们还会涉及一些关于Ajax & Json 4.Json 的使用 & Ajax 与 Json 配合使用、Android - 封装 JSON 数据(JSON 对象 / JSON 数组)、angular – 如何创建配置文件(tsconfig.json,typings.json,package.json)?、Arduino JSON over Serial,Json.Parse 返回意外的 JSON 输入的知识,以帮助您更全面地了解这个主题。
本文目录一览:- 如何在 Swift 中优雅地处理 JSON 数据(swiftui json)
- Ajax & Json 4.Json 的使用 & Ajax 与 Json 配合使用
- Android - 封装 JSON 数据(JSON 对象 / JSON 数组)
- angular – 如何创建配置文件(tsconfig.json,typings.json,package.json)?
- Arduino JSON over Serial,Json.Parse 返回意外的 JSON 输入
如何在 Swift 中优雅地处理 JSON 数据(swiftui json)
因为Swift对于类型有非常严格的控制,它在处理JSON时是挺麻烦的,因为它天生就是隐式类型。SwiftyJSON是一个能帮助我们在Swift中使用JSON的开源类库。开始之前,让我们先看一下在Swift中处理JSON是多么痛苦。
Ajax & Json 4.Json 的使用 & Ajax 与 Json 配合使用
一、Json 的使用
我们上一篇讲述了 Json 的基本用法,我们还自己写了几个 Json。
我们在写的过程中不难发现,就是这个 \\ 这个转义符添加的问题,这要是让我们写上一个班级的学生数据,那就完蛋了,所以为了不让我们自己去一个一个写,我们引入两种常用的 Json 格式化的 工具
一个是谷歌公司推出的 Gson,还有一个是阿里巴巴推出的 Fastjson
这两个我们用那个都行,看自己选择,我先来说这个 Gson
在此之前,我们创建一个 Student 的类,我们一会要用~~
id 主键
name 姓名
createDt 创建日期
price 自己有多少钱
hobbies 爱好
自己再去添加一下 get/set 方法,还有构造、toString
二、Gson
首先,我们去 maven 仓库,把这个 Gson 的包给他下载下来,下载地址:https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.6
下载下来之后,我们放到我们之前的 AjaxHelloWorld 项目中
然后,我们来写一个 GsonTest。
首先,我们先实例化一个 Student 的集合,然后,给这个集合赋一些初始值,后面要用
然后我们来开始做操作
1. 实例化一个简单的 Json 对象
这里我们需要用到 Gson 给我们提供的 JsonObject 对象,我们用它来创建对象,然后调用 addProperty 方法,给这个对象添加键值对
这里注意一下,看清楚导入的包,我们使用的是 import com.google.gson.JsonObject; 运行一下
当然了,这里我们再来试试别的
注意,这里只能添加引用类型,不能添加基本数据类型的值!!
可以看到,我们又添加了一个 key 为 123 的对象,但是并没有显示,而是做了替换,这个就是我之前说的,同一个 key 不可能存在同一个层级下。
2. 实例化一个简单的 Json 数组
实例化 Json 数组,我们是使用的 Gson 给我们提供的 JsonArray,添加对象需要调用 add 方法,如下
然后我们创建两个 JsonObject 对象,存放到这个数组中
运行一下,看看输出什么
可以看到,是一个数组对象
3. 将 list 集合转换成 Json
我们再来写一个方法,将我们之前定义的 list 集合转换成我们的 Json,这里其实我们调用的是 Gson 提供的 toJson 方法,我们来看一下
我们运行一下,看看效果
是没有问题的,我们把结果复制到 Json 检查的网站去检测一下
也是没有问题的
这里我要说一下,这个 Gson 对象的 toJson 方法有很多重载方法,可以将很多种数据结构的对象转换成 Json 对象,大家可以自己去研究研究(集合都可以转换,更不要说单个对象什么的了)
4. 将 Json 转换成 Java 对象
我们将 Json 字符串 转换成 Java 对象,这里呢,我们用刚刚生成的 Json 来进行测试
这里呢,我们需要用到 Gson 给我们提供的 fromJson 方法,这个 fromJson 方法里面有很多的构造函数
可以看到,提供的很全哈,我们这里使用倒数第二个,这里还需要多加一个类的支持
还有一点,这里需要知道具体的 Json 对象的格式,不然会报错,一般情况下,我们都是知道这个格式,然后进行转换
我们把这个 Json 数组转换成 List 集合,然后进行遍历输出一下
是没有问题的啊,因为我们只有一个对象,所以只能遍历出一个,当然啊,这里字段需要对应,不对应也是没有办法将这些值赋值给我们的对象中的属性的
三、FastJson
其实,FastJson 和 Gson 非常类似,仅仅是调用的函数名称不同,参数不同点而已,其他的使用方式都是类似的,FastJson Maven 下载地址:https://mvnrepository.com/artifact/com.alibaba/fastjson/1.2.75
下载好同样扔到我们的项目中
这里我直接上代码了,不说那么多废话了
1. 创建普通 Json 对象
这里要注意一下,Gson 给我们提供的是 JsonObject,阿里的 FastJson 给我们提供的是 JSONObject 不一样啊,看清楚了~~
2. 创建 Json 数组
3. list 集合转换 Json
这里需要注意的是,JSONObject 这个对象使用 toJSON 方法后,返回的是一个 Object 对象,这个对象最好强转成 JSONArray,或者是 JSONObject 去接收
4. Json 字符串转换成对象
这里是因为 JSONObject 调用 parse 之后,返回的是一个 Object 对象,因为我知道他是什么类型的,所以我就使用 List 进行接收
总体来说,两个都功能差不多,性能方面,是 FastJson 更好,但是相比这样的强转,我更喜欢 Gson 的转换~,当然,具体使用什么,看你自己~
四、Json 和 Ajax 配合使用
这里我们用 Gson 来实现一下它俩的配合~
我们先来修改一下我们之前的那个 Servlet
我们使用 JsonObject 将 Json 返回到前端,前端我们不变,我们继续使用 index2.html 进行测试,启动服务器,我们看一下结果
是 OK 的啊。
我们接下来修改一下,我们使用 $.get 方式进行获取一下,我们再来复制一个 index3.html
从新启动一下服务器,我们再来看看能不能行
也是可以的
当然,POST 也是可以的
原因就是我们这里调用了 doGet
Ajax 与 Json 就讲完了,希望大家可以好好学习理解他们,毕竟这玩意需要陪我们很久的
大家可以自己好好查查看,有不懂的可以联系我 QQ:2100363119
欢迎大家访问我的网站:https://www.lemon1234.com
可以的话关注一下我的公众号,就在我网站,每天都有更新~~~,无限资源畅游 Java,感谢~
最近小程序也开放了,大家可以扫码进行玩玩看
Android - 封装 JSON 数据(JSON 对象 / JSON 数组)
Android - 封装 JSON 数据(JSON 对象 / JSON 数组),一般情况下不会在 Android 端封装 JSON 的数据,因为封装 JSON 的数据是在服务器端进行封装了,Android 更多的工作是解析(JSON 对象 / JSON 数组)
而且在服务端封装 JSON 会更加简单灵活:
例如:JsonTools.createJsonString ("persons", list);/JsonTools.createJsonString ("person", person);
而这篇博客是讲解在 Android - 封装 JSON 数据(JSON 对象 / JSON 数组),只为熟悉 JSON 数据格式,真实开发中更多的是去解析 JSON 数据(JSON 对象 / JSON 数组)
注意:⚠ 千万不要 jsonObject.toString ()
否则会 在前面加 "后面也加" , 都在 json 数据有问题
package liudeli.mynetwork01;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.FileOutputStream;
public class MainActivity extends Activity {
private final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* 封装JSON对象数据
* {
* "name":"李四",
* "age":99,
* "hobby":"爱好是练习截拳道"
* }
*
* @param view
*/
public void pottingJSON1(View view) {
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("name", "李四");
jsonObject.put("age", 99);
jsonObject.put("hobby", "爱好是练习截拳道");
} catch (JSONException e) {
e.printStackTrace();
} finally {
Log.d(TAG, "jsonObject:" + jsonObject);
saveJSONDataToFile("pottingJSON1", jsonObject);
}
}
/**
* 封装JSON对象-带Key(student)
* {
* "Student":{
* "name":"李四",
* "age":99,
* "hobby":"爱好是练习截拳道"
* }
* }
*
* @param view
*/
public void pottingJSON2(View view) {
JSONObject jsonObjectALL = null;
try {
// student json 对象
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "李四");
jsonObject.put("age", 99);
jsonObject.put("hobby", "爱好是练习截拳道");
// 整个最大的 json 对象
jsonObjectALL = new JSONObject();
/**
* 注意:⚠ 千万不要jsonObject.toString()
* 否则会 在前面加" 后面也加" , 都在json数据有问题
*/
jsonObjectALL.put("student", jsonObject);
} catch (JSONException e) {
e.printStackTrace();
} finally {
Log.d(TAG, "jsonObjectALL:" + jsonObjectALL);
saveJSONDataToFile("pottingJSON2", jsonObjectALL);
}
}
/**
* 封装JSON对象-嵌套对象
* {
* "student":{
* "name":"李四",
* "age":99,
* "hobby":"爱好是练习截拳道",
* "dog":{
* "name":"阿黄",
* "age":"77",
* "sex":"母"
* }
* }
* }
* @param view
*/
public void pottingJSON3(View view) {
JSONObject jsonObjectALL = null;
try {
// dog json 对象
JSONObject dogJSONObject = new JSONObject();
dogJSONObject.put("name", "阿黄");
dogJSONObject.put("age", 77);
dogJSONObject.put("sex", "母");
// student json 对象
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "李四");
jsonObject.put("age", 99);
jsonObject.put("hobby", "爱好是练习截拳道");
/**
* 注意:⚠ 千万不要dogJSONObject.toString()
* 否则会 在前面加" 后面也加" , 都在json数据有问题
*/
jsonObject.put("dog", dogJSONObject);
// 整个最大的 json 对象
jsonObjectALL = new JSONObject();
/**
* 注意:⚠ 千万不要jsonObject.toString()
* 否则会 在前面加" 后面也加" , 都在json数据有问题
*/
jsonObjectALL.put("student", jsonObject);
} catch (JSONException e) {
e.printStackTrace();
} finally {
Log.d(TAG, "jsonObjectALL:" + jsonObjectALL);
saveJSONDataToFile("pottingJSON3", jsonObjectALL);
}
}
/**
* 封装JSON数组
* [
* {
* "name":"君君",
* "age":89,
* "sex":"男"
* },
* {
* "name":"小君",
* "age":99,
* "sex":"女"
* },
* {
* "name":"大君",
* "age":88,
* "sex":"男"
* }
* ]
*/
public void pottingJSONArray1(View view) {
try {
// 第一个JSON对象
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "君君");
jsonObject.put("age", 89);
jsonObject.put("sex", "男");
// 第二个JSON对象
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("name", "小君");
jsonObject2.put("age", 99);
jsonObject2.put("sex", "女");
// 第三个JSON对象
JSONObject jsonObject3 = new JSONObject();
jsonObject3.put("name", "大君");
jsonObject3.put("age", 88);
jsonObject3.put("sex", "男");
// 定义个JSON数组,把上面的三个JSON对象装进去
JSONArray jsonArray = new JSONArray();
jsonArray.put(0, jsonObject);
jsonArray.put(1, jsonObject2);
jsonArray.put(2, jsonObject3);
Log.d(TAG, "jsonArray:" + jsonArray);
saveJSONDataToFile("pottingJSONArray1", jsonArray);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 封装JSON数组-带Key
* {
* "person":[
* {
* "name":"君君",
* "age":89,
* "sex":"男"
* },
* {
* "name":"小君",
* "age":99,
* "sex":"女"
* },
* {
* "name":"大君",
* "age":88,
* "sex":"男"
* }
* ]
* }
* @param view
*/
public void pottingJSONArray2(View view) {
try {
// 第一个JSON对象
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "君君");
jsonObject.put("age", 89);
jsonObject.put("sex", "男");
// 第二个JSON对象
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("name", "小君");
jsonObject2.put("age", 99);
jsonObject2.put("sex", "女");
// 第三个JSON对象
JSONObject jsonObject3 = new JSONObject();
jsonObject3.put("name", "大君");
jsonObject3.put("age", 88);
jsonObject3.put("sex", "男");
// 定义个JSON数组,把上面的三个JSON对象装进去
JSONArray jsonArray = new JSONArray();
jsonArray.put(0, jsonObject);
jsonArray.put(1, jsonObject2);
jsonArray.put(2, jsonObject3);
// 整个最大的 json 对象
JSONObject jsonObjectAll = new JSONObject();
// 把上面的JSON数组,装进去
jsonObjectAll.put("person", jsonArray);
Log.d(TAG, "jsonObjectAll:" + jsonObjectAll);
saveJSONDataToFile("pottingJSONArray2", jsonObjectAll);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 保存JSON数据到文件
*/
private void saveJSONDataToFile(String fileName, JSONObject jsonData) {
try {
FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE);
fos.write(jsonData.toString().getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 保存JSON数据到文件
*/
private void saveJSONDataToFile(String fileName, JSONArray jsonData) {
try {
FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE);
fos.write(jsonData.toString().getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
布局代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="封装JSON对象"
android:onClick="pottingJSON1"
android:layout_weight="1"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="封装JSON对象-带Key"
android:onClick="pottingJSON2"
android:layout_weight="1"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="封装JSON对象-嵌套对象"
android:onClick="pottingJSON3"
android:layout_weight="1"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="封装JSON数组"
android:onClick="pottingJSONArray1"
android:layout_weight="1"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="封装JSON数组-带Key"
android:onClick="pottingJSONArray2"
android:layout_weight="1"
/>
</LinearLayout>
</LinearLayout>
结果;
/data/data/liudeli.mynetwork01/files/pottingJSON1
{
"name":"李四",
"age":99,
"hobby":"爱好是练习截拳道"
}
/data/data/liudeli.mynetwork01/files/pottingJSON2
{
"student":{
"name":"李四",
"age":99,
"hobby":"爱好是练习截拳道"
}
}
/data/data/liudeli.mynetwork01/files/pottingJSON3
{
"student":{
"name":"李四",
"age":99,
"hobby":"爱好是练习截拳道",
"dog":{
"name":"阿黄",
"age":77,
"sex":"母"
}
}
}
/data/data/liudeli.mynetwork01/files/pottingJSONArray1
[
{
"name":"君君",
"age":89,
"sex":"男"
},
{
"name":"小君",
"age":99,
"sex":"女"
},
{
"name":"大君",
"age":88,
"sex":"男"
}
]
/data/data/liudeli.mynetwork01/files/pottingJSONArray2
{
"person":[
{
"name":"君君",
"age":89,
"sex":"男"
},
{
"name":"小君",
"age":99,
"sex":"女"
},
{
"name":"大君",
"age":88,
"sex":"男"
}
]
}
angular – 如何创建配置文件(tsconfig.json,typings.json,package.json)?
但我想更多地了解这些文件.
我们如何手动创建它?
从哪里可以了解更多关于这些文件的信息?
包括有关项目使用的包和库的信息,
还可以包含npm脚本,它有助于运行应用程序的任务,如运行测试,构建js等等……
npm init来初始化新的package.json文件
文档:
npm docs
tsconfig.json
提供有关将过程打字稿编译为javascript的信息.在哪个版本应该编译ts,js文件应该包括源映射,以及此文件中通常描述的此类信息.
tsc –init到init新的tsconfig.json文件
docs:tsconfig docs
typings.json
包括对外部库的定义类型文件的引用,它可以帮助您的应用程序更智能感知.如果要为应用程序编写类型,则需要了解所使用的其他库的类型.
typings init初始化新的typings.json文件(应全局或本地安装)
更多信息:
typings package(帮助生成typings.json文件并保存依赖项)
types defenitions(库类型定义数据库)
full tsconfig scheme
希望它能帮到你!
Arduino JSON over Serial,Json.Parse 返回意外的 JSON 输入
我修好了,谢谢大家给我指明了正确的方向。问题出在我的 Arduino 代码中。我使用的是静态 JSON,它没有给我一个压缩字符串。
我将其切换为动态,如 https://arduinojson.org/ 文档中所述。
我的 Arduino 更改为以下内容。
#include <ArduinoJson.h>
void setup() {
// put your setup code here,to run once:
Serial.begin(9600);
}
void loop() {
myFunction();
delay(5000);
}
int myFunction(){
DynamicJsonDocument doc(260);
int temp = 21;
int humidity = 99;
doc["day"] = "Monday";
doc["temperature"] = temp;
doc["humidity"] = humidity;
serializeJson(doc,Serial);
Serial.println();
}
关于如何在 Swift 中优雅地处理 JSON 数据和swiftui json的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Ajax & Json 4.Json 的使用 & Ajax 与 Json 配合使用、Android - 封装 JSON 数据(JSON 对象 / JSON 数组)、angular – 如何创建配置文件(tsconfig.json,typings.json,package.json)?、Arduino JSON over Serial,Json.Parse 返回意外的 JSON 输入的相关知识,请在本站寻找。
本文标签: