在 C# 中简单地美化 JSON [重复]
Posted
技术标签:
【中文标题】在 C# 中简单地美化 JSON [重复]【英文标题】:Simply Beautify a JSON in C# [duplicate] 【发布时间】:2020-04-28 11:16:05 【问题描述】:我一直在寻找一种简单的原生方法来美化 C# 中的 JSON,但没有一个喜欢的,所以我自己做了并在这里分享,希望对你有帮助;)
它像这样转换压缩的 JSON:
["level":1,"exp":110,"energyGranted":5,"itemGranted":null,"level":2,"exp":195,"energyGranted":5,"itemGranted":null,"level":3,"exp":296,"energyGranted":5,"itemGranted":null]
像这样格式良好的 JSON:
[
"level": 1,
"exp": 110,
"energyGranted": 5,
"itemGranted": null
,
"level": 2,
"exp": 195,
"energyGranted": 5,
"itemGranted": null
,
"level": 3,
"exp": 296,
"energyGranted": 5,
"itemGranted": null
]
上下文:我正在处理一个处理从后端获得的 JSON 响应的 Unity 项目。我不想仅仅为了这个简单的任务而附加一些第三方 C# 库。
有 JsonUtility.ToJson(obj, prettyPrint)
Unity 内置方法可以做到这一点,但只能来自对象,而不是 JSON,因此我需要。
【问题讨论】:
这能回答你的问题吗? JSON formatter in C#? 我错过了这一点:***.com/a/57100143/4052438 感谢您的链接和您的时间! 【参考方案1】:您是否尝试过将字符串转换为对象然后使用 ToJson 函数?
var myObj = JsonUtility.FromJson<YourClass>(jsonString);
var prettyString = JsonUtility.ToJson(myObj);
【讨论】:
在我的上下文中,我不知道YourClass
中有什么,因为我不知道我的 JSON 中有什么:它是从我正在测试的后端返回的。此外,您的解决方案意味着创建此类,如果您有很多不同的 JSON 结构,例如我的情况,那么仅格式化 JSON 有点矫枉过正。【参考方案2】:
所以这是我的解决方案,它使用正则表达式组将 JSON 拆分为多行,并根据组修改缩进。
为了避免使正则表达式复杂化,我没有处理空格,因此它需要一个压缩的 JSON。
using System.Text; // used for StringBuilder, a better string concatenation than myStr += "content"
using System.Text.RegularExpressions;
public static class JsonUtil
public static string Beautify(string json)
const int indentWidth = 4;
const string pattern = "(?>([\\[][\\]],?)|([\\[])|([\\]],?)|([^:]+:)([^\\[\\],]*(?>([\\[])|,)?)|([^\\[\\],]+,?))";
var match = Regex.Match(json, pattern);
var beautified = new StringBuilder();
var indent = 0;
while (match.Success)
if (match.Groups[3].Length > 0)
indent--;
beautified.AppendLine(
new string(' ', indent * indentWidth) +
(match.Groups[4].Length > 0
? match.Groups[4].Value + " " + match.Groups[5].Value
: (match.Groups[7].Length > 0 ? match.Groups[7].Value : match.Value))
);
if (match.Groups[2].Length > 0 || match.Groups[6].Length > 0)
indent++;
match = match.NextMatch();
return beautified.ToString();
要使用它:var beautifiedJson = JsonUtil.Beautify(json);
就性能而言,它可能不是最好的解决方案,但它非常适合我的使用^^
如果你有更好的,请花时间分享它;)
【讨论】:
以上是关于在 C# 中简单地美化 JSON [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 LitJson 在 C# 中反序列化 JSON 对象数组 [重复]