解析C#中没有名称的JSON字符串

时间:2018-10-25 21:31:56

标签: c# json json.net

我的源数据为

[["value11", "value12"],["value13", "value14"]]
[["value21", "value22"]]
[["value31", "value32"],["value33", "value34"], ["value35", "value36"]]

不是

[["Key1" : "value11", "Key2" : "value12"],["Key1" : "value13", "Key2" : "value14"]]
[["Key1" : "value21", "Key2" : "value22"]]
[["Key1" : "value31", "Key2" : "value32"],["Key1" : "value33", "Key2" : "value34"], ["Key1" : "value35", "Key2" : "value36"]]

这是一个大文件。 JSON.Net无法解析此内容。是否有可用的解析器? 在here中,我可以使用Regex替换并格式化数据,但我不希望将其插入。

2 个答案:

答案 0 :(得分:1)

那是json!

您可以将每一行反序列化为List<string[]>

string s = "[[\"value11\", \"value12\"],[\"value13\", \"value14\"]]";
var a = JsonConvert.DeserializeObject<List<string[]>>(s);

答案 1 :(得分:0)

您可能会对JSON数组和对象感到困惑:

  • 对象=名称/值对的无序集合,例如{"name":"value"}
  • 数组=值的有序集合,例如[1, 2, {"pi":3.14159265359}]

您的第二个示例是不正确的,因为您将名称/值对放在数组而不是对象中:

[{"Key1" : "value11", "Key2" : "value12"},{"Key1" : "value13", "Key2" : "value14"}]
[{"Key1" : "value21", "Key2" : "value22"}]
[{"Key1" : "value31", "Key2" : "value32"},{"Key1" : "value33", "Key2" : "value34"}, {"Key1" : "value35", "Key2" : "value36"}]

但是,每一行本身都是有效的JSON,但不是全部内容。您要么需要:

  1. 分别处理each line
  2. 将所有内容放入带有逗号分隔符的数组(更改JSON生成)

例如,如果您希望整个内容有效,那么第一个测试用例将是:

[
  [["value11", "value12"], ["value13", "value14"]],
  [["value21", "value22"]],
  [["value31", "value32"],["value33", "value34"], ["value35", "value36"]]
]

请注意,它有一个外部数组,每个元素都是一个数组数组(3个级别的数组!)。

目前尚不清楚您打算如何使用这些数据,所以我现在只能告诉您。