我有一个JSON字符串,并且键具有大写和小写字符:
{"employees":[
{"FIrstName":"John", "LASTname":"Doe"},
{"FIRSTNAME":"Anna", "LaSTNaME":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
]}
我想将其转换为JToken
对象,并将所有键都转换JToken
为小写。因此在内部,JToken
它应该如下所示:
{"employees":[
{"firstname":"John", "lastname":"Doe"},
{"firstname":"Anna", "lastname":"Smith"},
{"firstname":"Peter", "lastname":"Jones"}
]}
以前,我曾经使用JToken json = JToken.Parse(jsonString);
过转换,但是我找不到如何使键变为小写。
有任何想法吗?
我之所以需要这样做是为了使我的JsonSchema
验证不区分大小写。
用最少的代码来解决这个问题的一种可能方式是继承JsonTextReader
并重写Value
属性返回一个小写的字符串,只要当前TokenType
是PropertyName
:
public class LowerCasePropertyNameJsonReader : JsonTextReader
{
public LowerCasePropertyNameJsonReader(TextReader textReader)
: base(textReader)
{
}
public override object Value
{
get
{
if (TokenType == JsonToken.PropertyName)
return ((string)base.Value).ToLower();
return base.Value;
}
}
}
之所以可行,是因为底层JsonTextReader
在TokenType
内部状态变化时保持更新,并且序列化程序(实际上是JsonSerializerInternalReader
类)在通过Value
属性从读取器检索属性名称时依赖于此。
您可以创建一个简短的辅助方法,以方便使用自定义阅读器反序列化:
public static class JsonHelper
{
public static JToken DeserializeWithLowerCasePropertyNames(string json)
{
using (TextReader textReader = new StringReader(json))
using (JsonReader jsonReader = new LowerCasePropertyNameJsonReader(textReader))
{
JsonSerializer ser = new JsonSerializer();
return ser.Deserialize<JToken>(jsonReader);
}
}
}
然后在您的代码中,只需替换为:
JToken json = JToken.Parse(jsonString);
有了这个:
JToken json = JsonHelper.DeserializeWithLowerCasePropertyNames(jsonString);
小提琴:https :
//dotnetfiddle.net/A0S3I1
问题内容: 我有一些JSON数据,但所有键都为大写。如何解析它们并将键转换为更低的键?我正在使用jQuery。 例如: JSON数据: 所需的输出: 问题答案: 这个怎么样: 正则表达式捕获键名$ 1并将其转换为小写。 现场演示:http : //jsfiddle.net/bHz7x/1/ [edit]要解决@FabrícioMatté的评论,另一个仅匹配文字字符的演示: http //jsfid
我正在尝试将JSON转换为GSON,我不确定这是最好的结构。 所有响应都由代码、消息和数据结构组成。但数据的内部结构可能会有所不同。 这是我的回应对象
问题内容: 兼职勉强的DBA在这里。我想将现有的主键索引从群集更改为非群集。语法在逃避我。 这就是现在的脚本编写方式。 我在在线文档中没有看到ALTER CONSTRAINT语句。 问题答案: 删除聚集索引,然后将主键重新创建为非聚集键:
问题内容: 我做了一些研究,似乎标准的Jsoup做出了更改。我想知道是否有一种配置方式,或者是否可以将其他解析器转换为Jsoup文档,或者通过某种方式解决此问题? 问题答案: 不幸的是,类的构造函数没有将名称更改为小写: 但是有两种方法可以改变这种行为: 如果您想要一个 干净的 解决方案,则可以克隆/下载JSoup Git并更改此行。 如果您想使用 肮脏的 解决方案,则可以使用反射。 #2的示例:
问题内容: 我在MongoDB中的规范化数据模型结构中遇到以下错误: 这是由于以下原因造成的: 具体的部分。我的文档中有一个DBRef对象,因此我可以引用另一个集合中的文档。嵌入式文档结构不是选项。那么我该如何解决呢? 问题答案: 您必须为其导入DBRef编解码器才能进行打印,如果您希望以文档json样式进行打印,则需要编写自己的DBRef编解码器,并将其添加到您给toJson()的编解码器中。
问题内容: 我有一个XML文件,例如 如何将其解析为JSON结构文件? 问题答案: 对于一个简单的解决方案,我建议使用Jackson库,它是一个Java库,用于生成和读取带有XML扩展名的JSON,因为它只需几行简单的代码就可以将任意复杂的XML转换为JSON。 input.xml Java代码: 该演示使用Jackson 1.7.7 (较新的1.7.8也可以使用),Jackson XML Dat