首页 > 解决方案 > 如何将 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 文档中的某个节点提升为数组?

标签: c#.netjson

解决方案


我不确定您所说的“声明式”是什么意思,但是按照您的示例,您可以使用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);
    }
}

工作演示:https ://dotnetfiddle.net/bOUOWD


推荐阅读