【问题标题】:c# .net - read JSONc# .net - 读取 JSON
【发布时间】:2016-01-12 16:05:07
【问题描述】:

我正在尝试从如下所示的 JSON 对象中读取环境变量:

{
  "staging_env_json": {},
  "running_env_json": {},
  "system_env_json": {
    "EN_VAR_NAME": {
      "mysql": [
        {
          "name": "name-here",
          "label": "label-here",
          "tags": [
            "mysql",
            "relational"
          ],
          "plan": "",
          "credentials": {
            "hostname": "host",
            "port": "port",
            "name": "name-here",
            "username": "username",
            "password": "password",
          }
        }
      ]
    }
  }
}

使用 C# 如何访问用户名和密码?这个我试过了……

envVariable = Environment.GetEnvironmentVariable("EN_VAR_NAME");      
var obj = JObject.Parse(envVariable);
var hostname = (string)obj["mysql"]["credentials"]["username"];

但这并没有把我带到哪里......谁能指出我正确的方向?

【问题讨论】:

  • 很诙谐的@Lee,但这就是JObject.Parse() 的来源。
  • 您的 JSON 无效;尝试通过 jsonlint.com 运行它
  • VAR_NAME 环境变量的名称,还是 JSON 对象的根元素的名称?
  • 另外,请提供有关失败的更多详细信息以及您为调试它所做的工作。有例外吗?您是否尝试过路径(mysql/credentials/username)的每一步,看看哪里失败了?

标签: c# json json.net


【解决方案1】:
dynamic obj = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(envVariable);
var userName = ((dynamic)obj).system_env_json.EN_VAR_NAME.mysql[0].credentials.username

【讨论】:

  • 对不起,如果这是一个愚蠢的问题 - 但是在 JSON 对象中有 'mysql' 的地方,这实际上是作为 p-mysql 返回的,但我无法使用它进行构建:var hostname = obj.system_env_json。 EN_VAR_NAME.p-mysql[0].credentials.username;因为它不喜欢 p-关于我如何解决这个问题的任何想法?
  • 这应该可以。 ((动态)obj).system_env_json.EN_VAR_NAME["p-mysql"][0].credentials.username
【解决方案2】:

您可以将其解析为动态:

dynamic result = JsonConvert.DeserializeObject<dynamic>(input);
Console.WriteLine(result.system_env_json.EN_VAR_NAME.mysql[0].credentials.username);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2019-07-21
    相关资源
    最近更新 更多