2012-10-23 11 views
9

Javascript型オブジェクト(JS関数)をJSONスキーマから生成するライブラリはありますか?基本的にはこれと同等のJSバージョンhttp://code.google.com/p/jsonschema2pojo/です。おかげさまで JSONスキーマからJavascript型オブジェクトへ

EDIT:

最低料金:

{ 
    "description": "An entity", 
    "type":"object", 
    "properties": { 
     "geometries": {"type": "array", 
      "items": { 
       "$ref" : "geometry" 
      } 
      } 
    } 
} 

私はこのようないくつかのコードは明らかにスキーマが$ refの年代と、より複雑になる可能性があり、私

function Entity { 
    this.geometries; 
} 

のために生成されたいのですが私はこれがアイデアを与えることを願っています。

+0

JSONは有効なJavascriptです。 –

+0

コードを記入してください。 –

+1

ようこそスタックオーバーフローへ。 '{}'ツールバーボタンでソースコードを書式設定することができます。私は今度あなたのためにそれをしました。 –

答えて

-1

あなたのタイプを識別する_type_プロパティをjsonオブジェクト(他のリテラルと衝突しないように奇妙な方法で名前を付けます)に追加することができます。その後、その文字列をjavascriptの別のオブジェクトにマップして、利用可能なプロパティをリストすることができます。

あなたはこれを行うことができます。それは良い考えではありません。 Jsonはjavascriptで直接使用されるように作られています。

0

私は、あなたが自分自身でそれを考えていると思います。とにかくそれをやることはあまり難しくありません。あなたが持っているJSONを解析して各項目を繰り返し、それぞれの "クラス"に必要なロジックを適用し、その結果を文字列に追加します。 これが終わったら、その文字列を出力し、JSフォーマッタを使用してコードを取得します。

+1

おかげさまで、既にそこに何かがあっただけで興味がありました。 JSONオブジェクト自体ではなく、それらのオブジェクトを操作することをお勧めします。 – Tarelli

+0

それは正確に何をしようとしているかによって異なります。私はC#と似たようなものを見たことがありますが、どこにいらっしゃるのかわからないので、Googleに試してみてください。 – alexandernst

2

このdjviライブラリは要件を満たしていますか?

提供された例は示しています

var jsonSchema = {"common":{"properties":{"type":{"enum":["common"]}},"required":["type"]}}; 

var env = new djvi(); 
env.addSchema('test', jsonSchema); 
env.instance('test#/common'); 
// => { type: 'common' } 

私はそれはあなたが後にしているソリューションであると思います。

今これはあなたが後にしている正確なソリューションではありませんが、私は同様の問題を持っていた機能として、親オブジェクトを返すために、次のソリューションを作成し、それを支援することがあります。

var dbdict = { 
    "title": "Entity", 
    "description": "An entity", 
    "type":"object", 
    "properties": { 
     "geometries": {"type": "array", 
      "items": { 
       "$ref" : "geometry" 
      } 
      } 
    } 
} 

var walkJSONSchema = function (JSONSchema, returnFunction) { 

    var walkObject = function(PROPS) { 
     var $this = this, 
      $child = {} 
     ; 

     if(returnFunction == true) { 
      $child = new function() {}; 
     } 

     //console.log("PROPS"); 
     //console.log(PROPS); 

     for(var key in PROPS) { 
      console.log("key:"+key+" type:"+PROPS[key].type+" default:"+PROPS[key].default); 
      switch(PROPS[key].type) { 
       case "boolean": 
        $child[key] = PROPS[key].default || undefined; 
        break; 
       case "integer": 
       case "number": 
        $child[key] = PROPS[key].default || undefined; 
        break; 
       case "array": 
        $child[key] = [].push($this.walkObject(PROPS[key].properties)); 
        break; 
       case "object": 
        $child[key] = $this.walkObject(PROPS[key].properties); 
        break; 
       case "string": 
        $child[key] = PROPS[key].default || undefined; 
        break; 
      }; 
     }; 

     return $child; 
    } 

    return walkObject(JSONSchema.properties); 
} 

Entity = walkJSONSchema(dbdict, true); 

もちろん、あなたは可能性がありしかし、あなたが好きなスキーマのdocから "Entity"の検索をスクリプト化しますが、少なくともこの方法では関数を取得します。

関連する問題