con#c {

时间:2017-03-27 01:40:59

标签: c# json

假设我有两个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中的对象是什么等等。无论如何。 ..问题解决了。

4 个答案:

答案 0 :(得分:6)

可能有点矫枉过正,但如果数据格式错误,您将获得有意义的错误,或者您将获得有效的JSON。

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

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

答案 1 :(得分:0)

的错误
string combinedjson = json1 + json2;

除非我不理解这个问题。

答案 2 :(得分:0)

你可以做的是将一个json数组构建为一个字符串,你可以在需要它的地方去除它。所以你可以这样做

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

如果你想做循环那么

string jsonArrayString ="[";

内循环

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

答案 3 :(得分:0)

为了组合这两个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'
]
}
]

希望它有所帮助。