【问题标题】:Split a string at the first occurrence of a character after matching string在匹配字符串后第一次出现字符时拆分字符串
【发布时间】:2016-03-31 22:24:23
【问题描述】:

数据:

{ 
    \"value\": 17.11, \"year\": 2015, \"sub\": [ {\"x\": 0, \"y\": 0.94 }, {\"x\": 1, \"y\": 1.08 }] 
}
, 
{ 
    \"value\": 17.23, \"year\": 2015, \"sub\": [ {\"x\": 0, \"y\": 0.23 }, {\"x\": 1, \"y\": 1.22 }] 
} 

我有一个您在上面看到的格式的 JSON 对象列表,我需要在两个对象之间的 ',' 处拆分对象。问题是文件中还有其他逗号。除了实际将 JSON 序列化为 List 之外,还有其他方法可以做到这一点吗?

我正在尝试将数据放入一个字符串数组中,例如:

string[] split = json.split(',');

请注意,上面的数据实际上都在一行中,没有任何换行符、制表符或任何东西。我在上面组织了它以使其更具可读性。

【问题讨论】:

  • 我会说,对于所需的努力,您不妨反序列化它。列表中有多少个对象?如果少于几百个,则反序列化的开销很小
  • 每个 json 对象是否像您的示例一样位于一行中?

标签: c# arrays json string


【解决方案1】:

编写自己的解析器会很棘手。如果您使用 JSON 解析器会容易得多。您的格式不是有效的 JSON,但它会在 [] 周围。所以如果你插入这些字符,你应该可以使用真正的解析器:

using Newtonsoft.Json

// ...

var objects = JsonConvert.DeserializeObject<List<SomeClass>>("[" + json + "]");

【讨论】:

  • 这确实太棘手了。虽然我没有使用 Newtonsoft.Json 而只是选择了 JavascriptSerializer,但这是最好的方法。关于括号的提示 +1。
猜你喜欢
  • 2014-10-12
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
相关资源
最近更新 更多