繁体   English   中英

如何覆盖 JObject 中的值

[英]How to override values in JObject

我一直在尝试覆盖我的 JObject 中的值(我从 web 应用程序中接收它,所以它可以不同)。 我尝试使用 for 循环,但我不知道如何使用 JObject 进行迭代。 Foreach 没用,因为我无法编辑 JObject 中的值。

这是我的尝试:

public JObject TranslateJson(string jsonString, LanguageCharset languageCharset)
    {
      JObject json = JObject.Parse(jsonString);
      for ( int i = 0; i > json.Count; i++)
      {
        json[i].Value = "test"; //Compiler Error CS1656
      }
      return json;
    }

#更新1

public JObject TranslateJson(string jsonString, LanguageCharset languageCharset)
    {
      JObject json = JObject.Parse(jsonString);
      foreach (var x in json)
      {
        json[x.Key] = "test";
      }
      return json;
    }

#更新2

json 的一部分:

{
  "common": {
    "appName": "[App name] Web",
    "other": "other",
    "others": "others",
    "dateRange": {
      "start": "Date from",
      "end": "Date to"
    },
    "sidebar": {
      "dashboard": "[App name] dashboard",
      "violations": {
        "list": "Infringement list",
        "timeline": "Activities and infringements"
      },
      "drivers": "Driver list",
      "profile": "Profile",
      "settings": "Settings",
      "logout": "Sign out"
    },
    "tariff": {
      "name": {
        "CZ": "Czech tariff",
        "RO": "Romanian tariff",
        "DE": "German tariff",
        "GB": "British tariff",
        "LT": "Lithuanian tariff",
        "DK": "Danish tariff",
        "PL": "Polish tariff",
        "BE": "Belgian tariff",
        "CH": "Swiss tariff",
        "FR": "French tariff",
        "LU": "Luxembourgish tariff",
        "SE": "Swedish tariff",
        "HU": "Magyar tariff"
           [..] (more nestings)

#更新 3

示例输入 json:

{
  "weapons": 
  {
    "axe": "axe",
    "sword": "sword" },
  "tools":
  {
    "saw": "saw"
  }
}

示例 output:

{
  "weapons": 
  {
    "axe": "translated",
    "sword": "translated" },
  "tools":
  {
    "saw": "translated"
  }
}

为什么只翻译? 因为当我可以覆盖 json 结构的任何嵌套内的值时,我只需调用我的 transtalion function。

下面是一个demo,大家可以看看。

var jsonString = @"
                    { items: [
                    {
                      ""name"": ""1111"", 
                      ""name2"": ""value2"", 
                      ""type"":  ""2222""
                    },
                    {
                      ""name"": ""33333"",
                      ""name2"": ""value2"",
                      ""type"": ""444444""
                    }
                    ] }";
       
        JObject json = JObject.Parse(jsonString);
       
        foreach (JObject o in json["items"].AsEnumerable())
        {
           foreach (var x in o)
            {    
               o[x.Key] = "test";        
            } 
        }
       

测试结果:

在此处输入图像描述

我尝试过这样的事情:

public string TranslateJson(string jsonString, LanguageCharset languageCharset)
    {
      JToken json = JToken.Parse(jsonString);
      foreach (var element in json)
      {
        if (element is JObject)
        {
          return "object";
        } else if (element is JArray)
        {
          return "array";
        }
      }
      return "you fckd up";
    }

它总是返回“you fckd up”,但我想得到与它不同的东西,但不知道如何实现它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM