在原来解析
json
数据是,一般都是用反序列化来实现json数据的解读,这需要首先知道json数据的结构并且建立相应的类才能反序列化,一旦遇到动态的
json
数据,这种方法就不使用。 为了解决动态解析json数据,微软有个
Newtonsoft.Json
封装类十分好用,里面的
JToken
直接实现对JSON的增删改查。
JToken
的层次结构是这样的:
JToken
-抽象基类
JContainer
- 能够包含其它
JToken
的
JToken
抽象基类
JArray
- 表示一个JSON数组(包含一个有序的List)
JObeject
- 表示一个JSON对象(包含一个
IEnumerable
)
JProperty
- 表示一个JSON属性(在
JObject
中是一个
name/JToken
键值对)
JValue
- 表示一个原生JSON值(
string,number,boolean,null
)
增删改查:
var cardJson = "['身份证','银行卡','门禁卡']";
var cardJArray = JArray.Parse(cardJson);
var p = new Person { Name="fan",Age=12,Dog=new Dog { Name="奶牛"} };
JObject jobj= JObject.FromObject(p);
jobj["NickName"] = "fan";
jobj["Wifes"] = new JArray("rose", "lisa");
((JArray)jobj["Wifes"]).Add( "july");
jobj["Cards"] = cardJArray;
jobj["Name"] = "li";
jobj["Age"] = 9;
jobj["Dog"]["Name"] = "阿黄";
((JArray)jobj["Wifes"])[0] = "roses";
jobj.Property("Name").AddBeforeSelf(new JProperty("ID", 1));
jobj.Property("Age").Remove();
((JArray)jobj["Wifes"])[2].Remove();
var props = jobj.Children().Values();
foreach (var prop in props)
if (!(prop is JObject) && !(prop is JArray))
Console.WriteLine(prop.ToString());
var cardList = ((JArray)jobj["Cards"]);
foreach (var card in cardList)
Console.WriteLine(card.ToString());
Console.WriteLine(jobj.Value<int>("ID"));
var p2 = jobj.ToString();
使用集合初始化语法:
JObject o = new JObject
{"CPU","Intel"},
{"Memory",2048},
"Drives",new JArray
"DVD",
Console.WriteLine(o.ToString());
使用dynamic
初始化:
dynamic address = new JObject();
address.Province = "beijing";
address.City = "beijing";
address.County = "zhongguo";
address.Villages = new JArray("aa", "bb");
Console.WriteLine(address.ToString());
使用JTokenWriter
初始化:
JTokenWriter writer = new JTokenWriter();
writer.WriteStartObject();
writer.WritePropertyName("Title");
writer.WriteValue("aaaaaaa???");
writer.WritePropertyName("Detail");
writer.WriteStartArray();
writer.WriteValue("Yes");
writer.WriteValue("No");
writer.WriteValue("Unknown");
writer.WriteEndArray();
writer.WriteEndObject();
JObject o = (JObject)writer.Token;
Console.WriteLine(o.ToString());
使用.NET值初始化:
JValue i = (JValue)JToken.FromObject(123);
Console.WriteLine(i.Type);
Console.WriteLine(i.ToString());
JValue s = (JValue)JToken.FromObject("GongHui");
Console.WriteLine(s.Type);
Console.WriteLine(s.ToString());
Address address = new Address
City = "GuangZhou",
Province = "GuangDong",
County = "ShiQiao",
Villages = new List<string>
"111",
"222"
JObject o = (JObject)JToken.FromObject(address);
Console.WriteLine(o.ToString());
遍历JSON
属性:
private static void JSON_SetChildNodes(ref JToken jobj, string nodeName, string value)
JToken result = jobj as JToken;
JToken result2 = result.DeepClone();
var reader = result.CreateReader();
while (reader.Read())
if (reader.Value != null)
if (reader.TokenType == JsonToken.String || reader.TokenType == JsonToken.Integer || reader.TokenType == JsonToken.Float)
Regex reg = new Regex(@"" + nodeName + "$");
if (reg.IsMatch(reader.Path))
result2.SelectToken(reader.Path).Replace(value);
jobj = result2;
catch (Exception ex)
手动创建JObject
:
var json = new JObject(
new JProperty("status", result.Status.ToString()),
new JProperty("results", new JObject(result.Entries.Select(pair =>
new JProperty(pair.Key, new JObject(
new JProperty("status", pair.Value.Status.ToString()),
new JProperty("description", pair.Value.Description),
new JProperty("data", new JObject(pair.Value.Data.Select(
p => new JProperty(p.Key, p.Value))))))))));
var str = json.ToString();
JToken
合并:
需要引一个Nuget
包:MassTransit
添加引用:using MassTransit.Courier.Serialization;
jObj.Merge(JObject.Parse(userTranslate.ValueJSON));
JToken
查找:
jObject.SelectToken($".{path}");
Object
转JToken
:
JToken.FromObject(object)
JToken
转Object
:
jObj.ToObject<List<ApiOrderInfoSelectModel>>();
Merge
方法:合并json
JObject o1 = JObject.Parse(@"{
'FirstName': 'John',
'LastName': 'Smith',
'Enabled': false,
'Roles': [ 'User' ]
}");
JObject o2 = JObject.Parse(@"{
'Enabled': true,
'Roles': [ 'Admin' ]
}");
o1.Merge(o2, new JsonMergeSettings
MergeArrayHandling = MergeArrayHandling.Union
});
string json = o1.ToString();
数据是,一般都是用反序列化来实现json数据的解读,这需要首先知道json数据的结构并且建立相应的类才能反序列化,一旦遇到动态的。数据,这种方法就不使用。为了解决动态解析json数据,微软有个。- 表示一个JSON数组(包含一个有序的List)- 表示一个JSON对象(包含一个。- 表示一个原生JSON值(- 表示一个JSON属性(在。直接实现对JSON的增删改查。封装类十分好用,里面的。
Newtonsoft.Json是一款.net下的Json序列化/反序列化库,省去了手动拼Json的麻烦,可以通过官网或者NuGet下载。
JObject是其中比较万金油的一个类,可以在不使用实体类的情况下构建/解析Json。
1.字符串转JObject
引入命名空间:
using Newtonsoft.Json.Linq;
Json数据:
"name": "steam"...
Newtonsoft.Json的Unity转换器
该软件包包含往返于常见Unity类型的转换器。 类型,例如Vector2,Vector3,Matrix4x4,四元数,颜色,甚至ScriptableObject等等。 (请参阅的)
Newtonsoft.Json软件包
此程序包需要在项目中包含Newtonsoft.Json.dll文件。 因此,它不必与我的jillejr.newtonsoft.json-for-unity软件包一起使用! 我认识到Unity生态系统中有太多的Newtonsoft.Json分支和变体。
该软件包可以与以下任何一项结合使用:
我自己的JamesNK原始牛顿软件的分支.Json回购: (推荐)
SaladLab的叉子:
ParentElement的资产商店软件包: ://www.parentelement.com/assets/json_
通过JObject和JArray创建JSON对象
我们先用非常简单的方法来动态创建一些JSON,可通过JToken派生的JSON.NET对象来进行,最常见的JToken派生的类是JObject和JArray。
正是因为JToken实现了IDynamicMetaProvider动态语言接口,所以可以使用dynamic关键字直观地创建动态对象,并把这个动态对象序列化为JSON字符串。 我们通过JAr...
"base":{
"hair":{"hair":{"name":"base/hair", "x":1424,"y":2564.5,"width":1132,"height":1177}},
"h_r":{"h...
原文出处:https://www.cnblogs.com/deepalley/p/10784344.html
JObject用于操作JSON对象
JArray用语操作JSON数组
JValue表示数组中的值
JProperty表示对象中的属性,以"key/value"形式
JToken用于存放LinqtoJSON查询后的结果
/// &amp;lt;summary&amp;gt;
/// Gets the j object.
/// &amp;lt;/summary&amp;gt;
/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
public JObject
public async Task<IActionResult> GetJson()
string jsonText = "{\"input\" : \"value\",\"status\" :true,\"httpstatus\":200}";
JObject jo =
Newtonsoft.Json.Compact.rar 是一个压缩文件,它包含了 Newtonsoft.Json 的紧凑版本。Newtonsoft.Json 是一个流行的 JSON 序列化与反序列化库,Compact 版本则是在文件大小上进行了优化。
Newtonsoft.Json 已经成为了很多开发人员处理 JSON 数据的首选工具。它提供了非常灵活且易于使用的 API,可以轻松地将对象转换为 JSON 字符串并进行反向操作。通过使用它,我们可以在各种平台和编程语言中处理 JSON 数据,包括在 .NET 平台上开发的应用程序。
但在某些情况下,我们希望在存储或传输 JSON 数据时减少文件的体积,以减少存储空间和网络带宽的消耗。为了解决这个问题,Newtonsoft.Json 提供了 Compact 版本。Compact 版本通过删除一些不必要的空格和换行符,以及一些其他优化技巧,有效地压缩了输出的 JSON 文本。
当我们下载并提取 Newtonsoft.Json.Compact.rar 后,我们将得到一个压缩文件中的紧凑版本的 Newtonsoft.Json 库。我们可以使用这个库来在应用程序中序列化和反序列化 JSON 数据,但在序列化后的 JSON 数据中将不会包含额外的空格和换行符,从而减小了存储和传输的开销。
综上所述,Newtonsoft.Json.Compact.rar 是一个压缩文件,其中包含了 Newtonsoft.Json 库的紧凑版本。通过使用这个压缩库,我们可以更高效地处理 JSON 数据并减少存储和网络带宽的消耗。