Javascript Can';t使用YAML.js将YAML解析为JSON
我对Javascript非常陌生,所以如果这个问题很容易,请不要笑得太大声。 我必须将JSON对象解析为YAML&然后使用新编辑的YAML(用户将提供给我们),将其解析为JSON对象。Javascript Can';t使用YAML.js将YAML解析为JSON,javascript,json,parsing,yaml,Javascript,Json,Parsing,Yaml,我对Javascript非常陌生,所以如果这个问题很容易,请不要笑得太大声。 我必须将JSON对象解析为YAML&然后使用新编辑的YAML(用户将提供给我们),将其解析为JSON对象。 我选择同一作者写的yaml.js和json2yaml.js。 问题是,当我从JSON对象解析到YAML时,一切都很好。 例如,json2yaml.js在解析后给我的是: --- state: id: 0 name: "CA" folder: id: 1202
我选择同一作者写的yaml.js和json2yaml.js。
问题是,当我从JSON对象解析到YAML时,一切都很好。 例如,json2yaml.js在解析后给我的是:
---
state:
id: 0
name: "CA"
folder:
id: 1202
name: "ABC"
type:
typeName: "firstlevel"
defaultthings: null
mainType: "metropolis"
id: 207
name: "CA"
owner:
id: 202
name: null
errorMessage: ""
isError: false
county:
-
id: 0
name: "_1"
folder: ""
city:
Type: "urban"
id: 17206
name: "El Segundo"
numberofinstances: 1
errorMessage: ""
isError: false
但是,当我使用yaml.js将其解析为JSON时,我得到一个错误,即无法解析yaml文件。我认为这是因为生成yaml函数错误,但我不知道如何使用它。有人面对这个问题吗,你知道解决这个问题的方法吗 =======
[更新]提供我用于解析的代码段 从JSON到YAML
"use strict";
var YAML = window.YAML , json, data , yml;
json = JSON.stringify(ko.toJS(finalData), null, 2);
data = JSON.parse(json);
yml = YAML .stringify(data);
return yml;
从YAML到JSON
var YAML = window.YAML, json, data;
data = YAML.parse(yml); // yml text we got above
json = JSON.stringify(data);
var jsonObject = JSON.parse(json);
实际上,我不认为这是语法错误,因为我在网站上使用了默认代码块:。看起来yaml的格式有点不正确(请检查),它不应该在---标记后有额外的缩进。 我看了一下json2yaml.js中的源代码,idenLevel总是
'\s\s'
indentLevel = indentLevel.replace(/$/, ' ')
你不需要它,你只需要它不是第一行(在标记之后)
要解决这个问题,可以在json2yaml.js的第7行添加以下代码
var handlers, indentLevel = '', firstLine = true; // add firstLine check
然后在x.forEach
之前的第38行和Object.keys(x.forEach
之前的第69行添加此检查
if (firstLine) {
firstLine = false;
} else {
indentLevel = indentLevel.replace(/$/, ' ')
}
您的yaml现在应该是有效的,并且可以解析回JSON。
希望这会有所帮助。另一个修复方法是将缩进代码(放在forEach周围)移动到forEach内部,从而降低缩进级别。这样就不需要进行一线检查 可以找到正确的源代码。注意第69行和第71行(用于阵列)以及第106行和第108行(用于对象)的标识代码 可以找到NodeJ(需要登录才能运行)和在浏览器中运行的工作示例:
<html>
<head>
<title>YAML</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/js-yaml/3.10.0/js-yaml.min.js"
type="text/javascript"></script>
<script src="https://unpkg.com/composix@0.1.3/dist/cpx-module_standalone.min.js"
type="text/javascript"></script>
<script src="https://rawgit.com/jeroenvalk/ComPosiX/master/src/main/javascript/modules/yaml.js"
type="text/javascript"></script>
</head>
<body>
<table border="1">
<tr>
<td><strong>YAML<strong></td>
<td><strong>JSON<strong></td>
</tr>
<tr>
<td><pre id="yaml"></pre></td>
<td><pre id="json"></pre></td>
</tr>
</table>
<script type="text/javascript">
_.module(['yaml'], function(YAML) {
const yaml = YAML.stringify({
"foo": "bar",
"baz": ["qux", "quxx"],
"corge": null,
"grault": 1,
"garply": true,
"waldo": "false",
"fred": "undefined"
});
document.getElementById('yaml').innerHTML = yaml;
const json = JSON.stringify(jsyaml.load(yaml), null, 4);
document.getElementById('json').innerHTML = json;
});
</script>
</body>
</html>
亚马尔
YAML
JSON
_.module(['yaml'],函数(yaml){
常数yaml=yaml.stringify({
“foo”:“bar”,
“baz”:[“qux”,“quxx”],
“corge”:空,
“格劳特”:1,
“garply”:没错,
“瓦尔多”:“假”,
“fred”:“未定义”
});
document.getElementById('yaml')。innerHTML=yaml;
const json=json.stringify(jsyaml.load(yaml),null,4);
document.getElementById('json')。innerHTML=json;
});
这是一项魅力十足的工作:|!我认为这个图书馆有一些严重的问题。