c# - 如何将 JSON 对象提升为数组?
问题描述
是否可以将 json 文档的特定部分“提升”为数组?
例如,输入将类似于:
{
"identifier": {"a":"awesome", "b":"back", "c":"cat"}
}
假设我想推广c
,并且在伪代码中,我们会做类似的事情:
var payload = "{\"identifier\": {\"a\":\"awesome\", \"b\":\"back\", \"c\":\"cat\"}}";
var payloadWithPromotedC = Promoter.ToArray(payload, "identifier.c");
结果将是这样的:
{
"identifier": {"a":"awesome", "b":"back", "c":["cat"]}
}
我们如何以声明方式将 json 文档中的某个节点提升为数组?
解决方案
我不确定您所说的“声明式”是什么意思,但是按照您的示例,您可以使用Json.Net执行类似的操作:
public class Promoter
{
public static string ToArray(string json, string propertyPath)
{
JToken root = JToken.Parse(json);
JToken tokenToPromote = root.SelectToken(propertyPath);
if (tokenToPromote == null)
{
throw new JsonException(propertyPath + " was not found");
}
if (tokenToPromote.Type == JTokenType.Array)
{
return json; // value is already an array so return the original JSON
}
tokenToPromote.Replace(new JArray(tokenToPromote));
return root.ToString(Formatting.None);
}
}
推荐阅读
- c++ - 如何在 SDL 中刷新屏幕(SDL_RenderClear 不起作用)?
- mysql - 为什么 MySQL 容器在使用 WSL 2 的 Windows 10 Home 上不断重启?
- arrays - 如何将数组的最后一个元素与 MPI C 中另一个进程的数组的第一个元素进行比较?
- bash - 是否可以将 HERE 文档和重定向结合起来写入文件而不在 Bash 中生成过程?
- clojure - 如何将字符串的clojure惰性序列转换为单独的字符串?
- android - Android 适配器 NotifyDataSetChange 不工作
- mysql - 无法远程访问 AWS EC2 实例上的 MySql docker 映像
- javascript - 子字符串在 innerHtml 上没有按预期工作
- math - 使用费马素性检验的乘法模逆(Assembly MIPS)
- r - 如何将数值数据集转换为 R 中的二进制值?