2012-10-23 6 views
9

Czy istnieje jakaś biblioteka do wygenerowania obiektu wpisanego w JavaScript (funkcje JS) ze schematu JSON? Zasadniczo odpowiednik wersji JS tego http://code.google.com/p/jsonschema2pojo/. Dzięki.Schemat JSON do Javascript wpisanego obiektu

EDIT:

Począwszy od:

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

Chciałbym trochę kodu tak, aby być generowane dla mnie

function Entity { 
    this.geometries; 
} 

Oczywiście schemat może być bardziej skomplikowane z $ ref-tych itp. Mam nadzieję, że to daje pomysł.

+0

JSON jest ważny Javascript, wiesz. –

+0

Proszę, opublikuj kod. –

+1

Witamy w przepełnieniu stosu. Możesz sformatować kod źródłowy za pomocą przycisku paska narzędzi {{}}. Zrobiłem to dla ciebie tym razem. –

Odpowiedz

-1

Jedyne co możesz zrobić, to dodać właściwość _type_ do swoich obiektów json (nazwij to w jakiś dziwny sposób, tak aby nie kolidował z innymi literałami), które identyfikują twój typ. Następnie można odwzorować ten ciąg na inny obiekt w javascript, który wymienia dostępne właściwości.

Można to zrobić - nie oznacza to, że jest to dobry pomysł. Json jest przeznaczony do bezpośredniego użycia w javascript.

0

Powiedziałbym, że jesteś sam na tym. W każdym razie robienie tego nie powinno być zbyt trudne. Po prostu przeanalizuj JSON, który masz, a następnie wykonaj iteracje po każdym elemencie, zastosuj logikę, którą chcesz dla każdej "klasy" i dołącz wynik do łańcucha. Po zakończeniu wydrukuj ten ciąg i użyj dowolnego programu formatującego JS, aby uzyskać kod.

+1

Dzięki, zainteresowałeś się tylko, czy coś tam jest. Nie jesteś nawet pewien, czy dobrze jest pracować z tymi obiektami zamiast z obiektami JSON. – Tarelli

+0

To zależy od tego, co dokładnie chcesz zrobić. Pamiętam, że widziałem coś podobnego dla C#, ale nie wiem gdzie, więc może powinieneś spróbować. – alexandernst

2

Czy ta biblioteka djvi spełnia twoje wymagania?

Podany przykład pokazuje:

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

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

Podejrzewam, że to rozwiązanie jest po.

Teraz to nie jest dokładne rozwiązanie jesteś po, ale miałem podobny problem i stworzył następujące rozwiązanie, aby powrócić do obiektu nadrzędnego w funkcji, to może pomóc:

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); 

oczywiście dało zakoduj pobieranie "encji" z dokumentu schematu, jak tylko chcesz, ale w ten sposób przynajmniej uzyskasz funkcję.