【问题标题】:Concat two json strings in c#在c#中连接两个json字符串
【发布时间】:2017-03-27 01:40:58
【问题描述】:

假设我有两个 JSON 字符串要开始: (来自 json.net 的示例)

string json1 = @"{
  'Name': 'Bad Boys',
  'ReleaseDate': '1995-4-7T00:00:00',
  'Genres': [
    'Action',
    'Comedy'
  ]
}";

and 

string json2 = @"{
  'Name': 'Good Ol Boys',
  'ReleaseDate': '2995-4-7T00:00:00',
  'Genres': [
    'Action',
    'None'
  ]
}";

有什么办法可以把这两个json字符串拼接成一个json字符串呢?我在这里查看了一些不同的项目,但它们不符合要求,主要是因为它们将两个对象合并为一个 - 我还没有看到很多只给我一个字符串中的两个对象。我找到了this answer,但它是用于 javascript,而不是 C#。然而,它接近我想要的。

similar question 标记为正确的答案不包含任何解释,也没有足够的代码为我提供正确的上下文来理解它。而且它更接近我想要做的事情,因为它包含“数据”元素......而投票数较多的答案合并并以某种方式覆盖了我的一个对象,让我留下一个,而不是两个。

我还没有准备好反序列化字符串,因为我不知道我会提前得到多少个对象。换句话说,我想把所有的 json 对象字符串放在一个大字符串中,然后我可以一次反序列化整个字符串。

我该怎么做?

编辑

原来我问的是如何连接两个数组,这根本不是一回事。所以我的问题是错误的。 This answer 是我上面提到的问题的答案。我最终做的是反序列化每个数组,然后执行AddRange(d2.data) 方法,然后重新序列化,这样我就可以将整个东西反序列化成一个大的 JSON 对象。然后我在其他地方使用它。

还有一件事 - C# 将字符串视为字符串,但即使 JSON 对象在技术上是字符串,但实际上它们不是,这是我困惑的一部分。我也不明白 JSON 对象是如何工作的,就什么是数组和什么是字符串而言......我在 SO 上看到了一些答案,基本上说要确保你理解 JSON 中的对象等等。无论如何。 ..问题解决了。

【问题讨论】:

  • string.Format("[{0},{1}]", json1, json2) 不起作用吗?
  • 如果不将它们组合成一个 javascript 对象,你想如何组合它们?常规字符串连接对 json 对象没有多大意义。
  • @MarkC。正确,它不起作用,因为您将得到不再是 JSON 的结果。

标签: c# json


【解决方案1】:

可能有点矫枉过正,但可以保证在数据格式错误的情况下得到一个有意义的错误,或者你会得到有效的 JSON。

var arrayOfObjects = JsonConvert.SerializeObject(
    new[] { JsonConvert.DeserializeObject(json1), JsonConvert.DeserializeObject(json2) }
)

我们将每个 json 对象反序列化为 object(因此我们不需要关心结构),将其包装在 object[] 中,然后将其序列化回 JSON。除非您要解析 大量 对象,否则这应该足够高效。

【讨论】:

    【解决方案2】:

    为了组合这 2 个 Json 字符串,你需要有一个更大的实体,允许你保存任何你想要的 json,在这种情况下,只需在字符串的开头放置和“[”,然后在它们之间放置一个逗号json字符串","最后关闭"]"

    string json = "[" + json1 + "," + json2 + "]";
    

    这是结果:

    [
    {
    'Name': 'Bad Boys',
    'ReleaseDate': '1995-4-7T00:00:00',
    'Genres': [
    'Action',
    'Comedy'
    ]
    },
    {
    'Name': 'Good Ol Boys',
    'ReleaseDate': '2995-4-7T00:00:00',
    'Genres': [
    'Action',
    'None'
    ]
    }
    ]
    

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      怎么了

      string combinedjson = json1 + json2;
      

      除非我不明白这个问题。

      【讨论】:

      • 我假设这不起作用,因为反序列化将不起作用,因为对象没有形成为单独对象的数组
      • 这没有意义,因为结果不再是 JSON。
      • 嗯,这会产生无效的 JSON,这会破坏他们的要求:"then I can deserialize the whole string all at once."
      • 我回答了问题,即如何连接 2 个字符串。 @Novadev 还表示他还没有准备好反序列化 JSON。他显然必须将 1 字符串转回一个数组以进行反序列化,或者找到一种不同的处理方式。
      【解决方案4】:

      您可以做的是构建一个 json 数组作为字符串,您可以在需要的地方对其进行反序列化。所以你可以这样做

      string jsonArrayString ="["+json1+","+json2+"]";
      

      如果你想循环,那么

      string jsonArrayString ="[";
      

      内循环

      {
      jsonArrayString =jsonArrayString +","+currentJsonItem;
      }
      jsonArrayString =jsonArrayString +"}";
      

      【讨论】:

      • 使用你自己的逻辑来处理第一个逗号。作为内部循环代码,我建议为第一项生成不需要的逗号
      猜你喜欢
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 2013-08-30
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      • 2013-11-05
      相关资源
      最近更新 更多