【问题标题】:How to convert YAML to JSON?如何将 YAML 转换为 JSON?
【发布时间】:2015-08-02 14:21:56
【问题描述】:

我希望在 YAML 文件和 JSON 之间进行转换。这真的很难找到任何信息。

【问题讨论】:

  • 您想保留所有 YAML 信息(例如打字、锚点/引用、cmets、块与流样式、多行标量)吗?或者您只是想转储一些在某些时候以某种形式从 YAML 反序列化的内部对象表示,并且不关心丢失 YAML 文件中的大部分信息(可能是因为您正在处理非常简单的 YAML 文件)?

标签: c# .net json yaml yamldotnet


【解决方案1】:

如果你不需要Json.NET的特性,也可以直接使用Serializer类发出JSON:

// now convert the object to JSON. Simple!
var js = new Serializer(SerializationOptions.JsonCompatible);

var w = new StringWriter();
js.Serialize(w, o);
string jsonText = w.ToString();

你可以在这里检查两个工作小提琴:

【讨论】:

  • 这段代码 sn-p 中的o 与什么有关?
  • 如果你将scalara scalar更改为100500这样的数字,输出中将是“100500”,带引号而不是纯100500。如何提前保留未知yaml的原始值?
【解决方案2】:

可以通过使用内置 JSON 库和 YamlDotNet 来做到这一点。这在 YamlDotNet 文档中并不明显,但我找到了一种相当简单的方法。

// convert string/file to YAML object
var r = new StreamReader(filename); 
var deserializer = new Deserializer(namingConvention: new CamelCaseNamingConvention());
var yamlObject = deserializer.Deserialize(r);

// now convert the object to JSON. Simple!
Newtonsoft.Json.JsonSerializer js = new Newtonsoft.Json.JsonSerializer();

var w = new StringWriter();
js.Serialize(w, yamlObject);
string jsonText = w.ToString();

我很惊讶它的效果如此之好! JSON 输出与其他基于 Web 的工具相同。

【讨论】:

  • 我建议将StreamReader 包含在using 语句中。
  • in js.Serialize(w, o); o 来自哪里。
  • 我认为o应该是yamlObject
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 2016-09-09
  • 2016-07-03
  • 2014-07-07
  • 2016-12-11
  • 2018-04-12
相关资源
最近更新 更多