Javascript Can';t使用YAML.js将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

我对Javascript非常陌生,所以如果这个问题很容易,请不要笑得太大声。 我必须将JSON对象解析为YAML&然后使用新编辑的YAML(用户将提供给我们),将其解析为JSON对象。
我选择同一作者写的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;
});

这是一项魅力十足的工作:|!我认为这个图书馆有一些严重的问题。