C#如何将包含JSON数组的字符串拆解为独立JSON字符串组成的数组
C# JSON数组字符串拆解为独立JSON字符串数组解决方案
报错原因
你调用JsonConvert.DeserializeObject()时未指定反序列化的目标类型,JSON字符串最外层为数组标识[,反序列化器无法匹配默认解析规则,因此抛出Unexpected character encountered while parsing value: [错误。
实现方案
推荐使用你当前引入的Newtonsoft.Json(Json.NET)库实现,步骤最简:
步骤1:引入命名空间
using Newtonsoft.Json.Linq; using Newtonsoft.Json;
步骤2:核心实现代码
// 原始待处理JSON数组字符串 string rawJson = "[{\"id\": 111, \"value\": 22, \"timestamp\": \"2021-09-20T02:34:17.000Z\"},{\"id\": 112, \"value_1\": 23, \"value_2\": 24, \"timestamp\": \"2021-09-20T02:33:17.000Z\"}]"; // 解析为JSON数组对象 JArray jsonArray = JArray.Parse(rawJson); // 遍历每个元素,转换为独立JSON字符串,得到最终结果 IEnumerable<string> messages = jsonArray.Select(item => // 若需要单引号格式可追加.Replace("\"", "'"),注意单引号为非标准JSON格式 item.ToString(Formatting.None) ).AsEnumerable();
输出说明
- 默认输出为标准双引号格式的压缩JSON字符串,符合通用JSON规范
- 若需和你示例中一致的单引号格式,可在ToString()后追加
.Replace("\"", "'") - 若需要带缩进的格式化JSON,把
Formatting.None修改为Formatting.Indented即可
补充:.NET自带System.Text.Json实现
如果你不想引用第三方库,可使用.NET Core 3.0+自带的System.Text.Json库实现:
using System.Text.Json; using System.Text.Json.Nodes; string rawJson = "[{\"id\": 111, \"value\": 22, \"timestamp\": \"2021-09-20T02:34:17.000Z\"},{\"id\": 112, \"value_1\": 23, \"value_2\": 24, \"timestamp\": \"2021-09-20T02:33:17.000Z\"}]"; JsonArray jsonArray = JsonNode.Parse(rawJson).AsArray(); IEnumerable<string> messages = jsonArray.Select(item => item.ToJsonString(new JsonSerializerOptions { WriteIndented = false }) ).AsEnumerable();
内容的提问来源于stack exchange,提问作者yyuankm
相关产品推荐
相关产品推荐

