如何用C# Newtonsoft.Json将JObject中嵌套JArray转为指定格式字符串?
问题描述
我使用C#的Newtonsoft.Json库,对JSON格式有一定了解但并非完全精通。现有如下JSON示例数据(已解析为JObject类型):
{ "data" : [ [ { "key1":"value1", "key2":"value2" },{ "key1":"value3", "key2":"value4" } ],[ { "key10":"value10" } ] ] }
我希望将其转换为如下格式的字符串:
[ { "key1":"value1", "key2":"value2" },{ "key1":"value3", "key2":"value4" } ],[ { "key10":"value10" } ]
我尝试了以下代码:
//JObject jobj = /*Sample json*/; string json = (jobj["data"] as JArray)[0].ToString();
但这段代码仅返回data数组中的第一个子数组,无法得到所有子数组的拼接结果,请问正确的转换方法是什么?
解决方案
你需要直接获取整个data对应的JArray,再对其序列化结果做简单处理,或者遍历子元素拼接,两种方式都能实现需求:
方法一:序列化后去除首尾方括号
JObject jobj = /* 你的JObject实例 */; JArray dataArray = jobj["data"] as JArray; // 序列化带缩进格式的完整数组 string fullArrayJson = dataArray.ToString(Formatting.Indented); // 去掉首尾方括号并清理多余空白 string result = fullArrayJson.TrimStart('[').TrimEnd(']').Trim();
说明
dataArray.ToString(Formatting.Indented)会生成包含首尾方括号的完整数组JSON,通过TrimStart和TrimEnd去除方括号后,就能得到多个子数组用逗号分隔的目标格式。
方法二:遍历子数组拼接字符串
JObject jobj = /* 你的JObject实例 */; JArray dataArray = jobj["data"] as JArray; List<string> subArrayStrs = new List<string>(); foreach (JToken subArray in dataArray) { subArrayStrs.Add(subArray.ToString(Formatting.Indented)); } // 用逗号拼接所有子数组的字符串 string result = string.Join(",", subArrayStrs);
说明
这种方式更灵活,可自定义子数组之间的分隔符,或者对单个子数组的序列化格式做单独调整。
内容的提问来源于stack exchange,提问作者HR P
相关产品推荐
相关产品推荐

