小编Cod*_*ger的帖子

比较两个相同结构的任意JToken-s

提前致谢.我感谢任何帮助.

我想比较两个相同类型和结构的任意JTokens(来自NewtonSoft的Json.Net).

static int CompareTokens(JToken x, JToken y);  
// possible output: 0 / 1 / -1
Run Code Online (Sandbox Code Playgroud)

主要目标是能够使用此方法对两个Json字符串进行排序,这样即使在开始时它们具有相同的数据,但是以不同的顺序,最后这两个字符串完全相同.所以排序标准并不重要,重要的是这个标准总是一样的.并且应该考虑每个小数据元素.

JToken可以是以下几种类型之一:Array, Boolean, Date, Float, Guid, Integer, Null, Object, Property, String, TimeSpan, Uri.我不考虑比较Bytes, Comment, Constructor, None, Undefined, Raw.

  • 获得一些关于比较JArraysJObjects的想法会很棒.这应该是一些递归比较,因为JArrays可能包含其他JArraysJObject,反之亦然.任何想法将不胜感激.
  • 但是,了解比较更简单的类型也会非常有帮助.我想知道如何从JToken转换为实际类型(而不是知道如何逻辑地执行它).
  • JValue已实现IComparable,但我没有弄清楚如何将简单类型的JToken转换为JValue.了解这一点也会有所帮助.

这是一个很常见的问题.如果我弄明白该怎么做,我会给它加一个+100.抱歉我的英语.

c# json json.net

7
推荐指数
2
解决办法
3995
查看次数

在/不在[]内时拆分字符串

我正在尝试拆分表示XPath的字符串,例如:

string myPath = "/myns:Node1/myns:Node2[./myns:Node3=123456]/myns:Node4";
Run Code Online (Sandbox Code Playgroud)

我需要拆分'/'('/'从结果中排除,就像正常的字符串拆分一样),除非'/'碰巧在'[...]'之内(其中'/'都不是分开,也包括在结果中).

那么正常的事情string[] result = myPath.Split("/".ToCharArray())让我:

result[0]: //Empty string, this is ok
result[1]: myns:Node1
result[2]: myns:Node2[.
result[3]: myns:Node3=123456]
result[4]: myns:Node4
Run Code Online (Sandbox Code Playgroud)

results[2]result[3]应主要结合起来,我应该结束了:

result[0]: //Empty string, this is ok
result[1]: myns:Node1
result[2]: myns:Node2[./myns:Node3=123456]
result[3]: myns:Node4
Run Code Online (Sandbox Code Playgroud)

由于我不是非常流利的正则表达式,我已经尝试在拆分后手动将结果重新组合成一个新的数组,但我担心的是,尽管让它在这个例子中起作用是微不足道的,但正则表达式似乎是更好的选择.我得到更复杂的xpaths的情况.

为了记录,我查看了以下问题:正则
表达式拆分字符串保留引号
C#Regex Split - 引号外的引号
拆分具有空格的字符串,除非它们包含在"引号"中?

虽然他们应该足以帮助解决我的问题,但我遇到了一些问题/困惑的方面,阻止他们帮助我.
在前2个链接中,作为正则表达式的新手,我发现它们难以解释和学习.他们正在寻找引用,左右对之间看起来相同,所以把它翻译成[和]让我感到困惑,试错不教我任何东西,而是让我更加沮丧.我可以理解相当基本的正则表达式,但这些答案的作用比我目前理解的要多一点,即使在第一个链接中有解释.
在第三个链接中,我将无法访问LINQ,因为代码将在旧版本的.NET中使用.

c# regex string split

5
推荐指数
2
解决办法
182
查看次数

标签 统计

c# ×2

json ×1

json.net ×1

regex ×1

split ×1

string ×1