如何使用json.net设置json路径的值

本文关键字:json 路径 net 何使用 设置 | 更新日期: 2023-09-27 18:20:50

我试图在JSON结构中设置一个任意路径,但我很难弄清楚如何设置一个简单的值。。。

我想要的是一些方法,比如SetValue(path,value),它的操作方式类似于SelectToken,但如果路径不存在,则会创建路径并设置值。

public void SetPreference(string username, string path, string value)
{
    var prefs = GetPreferences(username);
    var jprefs = JObject.Parse(prefs ?? @"{}");
    var token = jprefs.SelectToken(path);
    if (token != null)
    {
        // how to set the value of the path?
    }
    else
       // how to add the path and value, example {"global.defaults.sort": { "true" }}
}

我所说的global.defaults.sort路径实际上是{ global: { defaults: { sort: { true } } } }

如何使用json.net设置json路径的值

    public string SetPreference(string username, string path, string value)
    {
        if (!value.StartsWith("[") && !value.StartsWith("{"))
            value = string.Format("'"{0}'"", value);
        var val = JObject.Parse(string.Format("{{'"x'":{0}}}", value)).SelectToken("x");
        var prefs = GetPreferences(username);
        var jprefs = JObject.Parse(prefs ?? @"{}");
        var token = jprefs.SelectToken(path) as JValue;
        if (token == null)
        {
            dynamic jpart = jprefs;
            foreach (var part in path.Split('.'))
            {
                if (jpart[part] == null)
                    jpart.Add(new JProperty(part, new JObject()));
                jpart = jpart[part];
            }
            jpart.Replace(val);
        }
        else
            token.Replace(val);
        SetPreferences(username, jprefs.ToString());
        return jprefs.SelectToken(path).ToString();
    }