XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension

【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension

fix-修复了Json解析时,连续出现对象的bug add-现在JsonNode查询可以使用GetChildNodes方法获取枚举列表

d8900b6
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

5 个文件 +26 -14
Modified README.md +5 -4
@@ -45,15 +45,16 @@ var jsonString = """
45 45 {"code":0,"message":"0","data":{"archives":[{"id":0,"text":"这是Json的使用教程文档","trash":"垃圾文本1"},{"id":1,"text":"在这里,你将了解JsonNode的查询方式","trash":"垃圾文本2"},{"id":2,"text":"Hello World!","trash":"垃圾文本3"}]}}
46 46 """;
47 47 var jsonNode = (QueryableJsonNode)targetJsonString;
48 var packageList = jsonNode["data"]["archives"]["package:list", "id", "text"].PackageInListObject();
48 var packageList = jsonNode["data"]["archives"]["package:list", "id", "text"].PackageInListObject();//打包列表
49 49 foreach (var node in packageList)
50 50 {
51 Console.WriteLine($"ID:{node.ElementAt(0).Value.Value}\tDocument:{node.ElementAt(1).Value.Value}");
51 Console.WriteLine($"ID:{node["id"]}\tDocument:{node["text"]}");//直接提取属性
52 52 }
53 var packageObject = jsonNode["package:object", "code", "message"].PackageInListObject();
53
54 var packageObject = jsonNode["package:object", "code", "message"].PackageInListObject();//打包对象
54 55 foreach (var node in packageObject)
55 56 {
56 Console.WriteLine($"PropertyName:{node.Key}\tValue:{node.Value.Value}\tValueType:{node.Value.ValueType}");
57 Console.WriteLine($"PropertyName:{node.Key}\tValue:{node.Value}\tValueType:{node.Value.ValueType}");//遍历属性
57 58 }
58 59 ```
59 60
Modified XFEExtension.NetCore.Test/Program.cs +10 -5
@@ -1,20 +1,25 @@
1 using XFEExtension.NetCore.XFEChatGPT;
1 using XFEExtension.NetCore.FileExtension;
2 using XFEExtension.NetCore.XFEChatGPT;
2 3 using XFEExtension.NetCore.XFETransform.JsonConverter;
3 4
4 5 internal class Program
5 6 {
6 7 public static MemorableXFEChatGPT XFEChatGPT { get; set; } = new MemorableXFEChatGPT();
7 8 public static string CurrentDialogID { get; set; } = Guid.NewGuid().ToString();
8 private static async Task Main(string[] args)
9 private static void Main(string[] args)
9 10 {
10 11 using var client = new HttpClient();
11 12 client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0");
12 13 client.DefaultRequestHeaders.Add("Origin", "https://www.piyao.org.cn");
13 14 client.DefaultRequestHeaders.Add("Referer", "https://www.piyao.org.cn/");
14 QueryableJsonNode jsonNode = await client.GetStringAsync($"https://so.news.cn/xhtvapp/rumourSearch?title={Uri.EscapeDataString(Console.ReadLine())}&pageNum=1&timeInterval=&startTime=&endTime=&typeName=&pageSize=100&sort=-2&callback=?");
15 foreach (var nodes in jsonNode["content"]["resultList"]["package:list", "title", "thirdCheckTime", "url"].PackageInListObject())
15 QueryableJsonNode jsonNode = @"C:\Users\XFEstudio\Desktop\work\C#\GitHub\XFEstudio\XUnitConsole\XUnitConsole\bin\Debug\net8.0\Json存储.txt".ReadOut()!;
16 //foreach (var node in jsonNode["data"]["package:list","name", "avatar_url_template"].PackageInListObject())
17 //{
18 // Console.WriteLine($"名称:{node["name"]}\tID:{node["avatar_url_template"]}");
19 //}
20 foreach (var node in jsonNode["data"].GetChildNodes())
16 21 {
17 Console.WriteLine($"标题:{nodes["title"].Value}\t发布时间:{nodes["thirdCheckTime"].Value}\t网址:{nodes["url"].Value}");
22 Console.WriteLine($"名称:{node["name"]}");
18 23 }
19 24 }
20 25
Modified XFEExtension.NetCore/XFEExtension.NetCore.csproj +3 -3
@@ -5,7 +5,7 @@
5 5 <ImplicitUsings>enable</ImplicitUsings>
6 6 <Nullable>enable</Nullable>
7 7 <GenerateDocumentationFile>True</GenerateDocumentationFile>
8 <Version>3.1.3</Version>
8 <Version>3.1.4</Version>
9 9 <Title>XFEExtension</Title>
10 10 <RepositoryUrl>https://github.com/XFEstudio/XFEExtension</RepositoryUrl>
11 11 <AnalysisLevel>latest</AnalysisLevel>
@@ -20,8 +20,8 @@
20 20 <PackageTags>XFE;拓展;GPT;Server;服务器;测试;XFEExtension</PackageTags>
21 21 <PackageReleaseNotes>## 调整
22 22
23 增加ValueNode的ToString重写方法
24 现在Json解析不会被无关的空格换行等任何字符串干扰
23 修复了Json解析时,连续出现对象的bug
24 现在JsonNode查询可以使用GetChildNodes方法获取枚举列表
25 25
26 26 ## 新增
27 27
Modified XFEExtension.NetCore/XFETransform/JsonConverter/JsonNodeConverter.cs +2 -2
@@ -41,7 +41,7 @@ public class JsonNodeConverter(string jsonString)
41 41 {
42 42 currentSymbol = JsonSymbol.Brace;
43 43 currentState = CurrentState.BeforeProperty;
44 if (jsonNode.DescendingNodes.Count == 0)
44 if (jsonNode.DescendingNodes.Count == 0 && lastSymbol != JsonSymbol.Colon)
45 45 break;
46 46 currentLayer++;
47 47 if (currentPosition.Count < currentLayer + 2)
@@ -271,7 +271,7 @@ public class JsonNodeConverter(string jsonString)
271 271 currentPropertyValue = currentPropertyValue.Replace("\"", "");
272 272 return ValueType.Text;
273 273 }
274 else if(currentPropertyValue.Equals("null", StringComparison.CurrentCultureIgnoreCase))
274 else if (currentPropertyValue.Equals("null", StringComparison.CurrentCultureIgnoreCase))
275 275 {
276 276 return ValueType.Null;
277 277 }
Modified XFEExtension.NetCore/XFETransform/JsonConverter/QueryableJsonNode.cs +6 -0
@@ -89,6 +89,12 @@ public class QueryableJsonNode(JsonNode jsonNode) : INodeBase, IQueryableJsonNod
89 89 /// <exception cref="NullReferenceException"></exception>
90 90 public Dictionary<string, ValueNode> PackageObject() => InnerValue is Dictionary<string, ValueNode> innerValue ? innerValue : throw new NullReferenceException();
91 91 /// <summary>
92 /// 获取所有子节点
93 /// </summary>
94 /// <returns></returns>
95 /// <exception cref="InvalidOperationException"></exception>
96 public IEnumerable<QueryableJsonNode> GetChildNodes() => OriginalNode is JsonComplexPropertyNode jsonComplexPropertyNode ? jsonComplexPropertyNode.DescendingNodes.Select(node => new QueryableJsonNode(node)) : throw new InvalidOperationException("无法将非复杂节点转为节点列表");
97 /// <summary>
92 98 /// 隐式将Json字符串转换为可查询节点
93 99 /// </summary>
94 100 /// <param name="jsonString"></param>