2016-07-04 19 views
3

私は本当にJavascriptで新しくなっています。 JSONオブジェクトをYAML &に解析する必要があります。これはYAMLの新しい編集(ユーザーが私たちに与える)を使ってJSONオブジェクトに解析します。
私が選択したのは同じ著者が書いたyaml.js & json2yaml.jsです。
JSONオブジェクトからYAMLを解析する際に問題はすべてあります。例えば 、どのような解析の後に私を与えるjson2yaml.jsは次のとおりです。yaml.jsを使ってYAMLをJSONに解析できません

--- 
    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関数を生成するためだと思うが、これをどのように扱うべきか分からない。
誰もがこれに直面していますか、あなたはこれに対する解決策を知っていますか?

======
[更新]私は、私はドン

var YAML = window.YAML, json, data; 
data = YAML.parse(yml); // yml text we got above 
json = JSON.stringify(data); 
var jsonObject = JSON.parse(json); 

実際にJSONにYAML

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; 

にJSONから を解析するために使用するコードスニペットを提供します」私はウェブサイト上のデフォルトのコードブロックを使用しているため、文法エラーだとは思わない:http://jsontoyaml.com/#browser-javascript

答えて

2

は(http://www.yamllint.com/に確認してください)少しオフになっている、それは---マーカーの後に余分なインデントを持つべきではありません。 あなたが唯一 (マーカーの後に)そのない最初の行と、その必要があるだろう、という必要はありません。私は、json2yaml.jsでソースコードを見てみましょうidenLevelは常に'\s\s'

indentLevel = indentLevel.replace(/$/, ' ') 

ですそれを修正するには、このチェック

if (firstLine) { 
    firstLine = false; 
} else { 
    indentLevel = indentLevel.replace(/$/, ' ') 
} 
を追加し、 Object.keys(x).forEachx.forEach前の38行で次にjson2yaml.js

var handlers, indentLevel = '', firstLine = true; // add firstLine check 

の7行目で、コードの下に追加し、ライン69することができます

yamlは有効なもので、JSONに解析することができます。 希望に役立ちます。

+0

それは魅力のように動作します:|!私はこのライブラリには重大な問題があると思います。 –

-1

まずは、私たちはあなたが何をしたのかわからなくても、あなたに答えることができないコードが必要です。スペルミスの可能性があります。または、正しいものではない関数を使用している可能性があります。

第2に、JSONはあなたが提案していると思うオブジェクトです。 JSONは、オブジェクト(JavaScript Object Notation)を表す特定の形式のStringです。しかし、まだそのオブジェクトではありません。

私たちはあなたを助けることができるより多くのように教えてください:)

それはYAMLのフォーマットのように思える
0

もう一つの修正点はforEachの内側に配置されたインデントコードを移動してインデントレベルを下げることです。 firstLineチェックは必要ありません。

修正されたソースコードはhereです。 69行目と71行目(配列用)、106行目と108行目(オブジェクト用)の識別コードに注意してください。

の実施例は、ブラウザで実行するためNodeJSためhere(実行するためにログインが必要です)とhereを見つけることができます:

<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/[email protected]/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> 
関連する問題