2014-09-16 3 views
1

Я новичок в схеме json, и мне трудно найти решение моей проблемы. Мне нужно заполнить данные, отправленные сервером, в редактор json, используя приведенную ниже схему.Задать динамические значения для Json Schema

Примечание: это всего лишь фрагмент схемы. У меня есть JSon схема, которая выглядит следующим образом:




    { 
     "id": "#ProcessApplicationList", 
     "type": "array", 
     "title":"ProcessApplicationList", 
     "description":"List of process application.", 
     "items": { 
     "id": "#ProcessApplication", 
     "type": "object", 
     "required":[ 
     "ProcessId", 
     "InputParameter" 
     ], 
     "title":"ProcessApplication", 
     "description":"Process application.", 
     "properties": { 
      "ProcessId":{ 
      "id":"#ProcessId", 
      "type":"string", 
      "title":"Identification code of process", 
      "description":"e.g. 'process#01'" 
      }, 
      "InputParameter": { 
      "id": "#InputParameter", 
      "type": "object", 
      "additionalProperties": { 
       "anyOf": [ 
       { "type": "string" }, 
       { "type": "number" }, 
       { "type": "boolean"} 
       ] 
      } 
      } 
     } 
     } 
    } 


Это ответ образца с сервера.



    { 
     "Acceptability" : { 
     "ProcessList" : [ 
      { 
      "ProcessId" : "process#01", 
      "ProcessName" : "sign", 
      "ProcessDescription":"sign your plug-in by using signature", 
      "ProcessAvailability" : true, 
      "ProcessParameterSchema" : { 
       "\"$schema\":\"http://json-schema.org/draft-04/schema#\", 
       \"sign_type\":{ 
       \"id\":\"#sign_type\", 
       \"type\":\"string\", 
       \"title\":\"sign_type\"} 
      }, 
      { 
       "ProcessId" : "process#02", 
       "ProcessName" : "encryption", 
       "ProcessDescription":"encrypt your plug-in by using key", 
       "ProcessAvailability" : true, 
       "ProcessParameterSchema" : { 
       "\"$schema\":\"http://json-schema.org/draft-04/schema#\", 
       \"enc_type\": { 
        \"id\":\"#enc_type\", 
        \"type\":\"string\", 
        \"title\":\"enc_type\" 
       } 
      } 
      } 
     ] 
     } 
    } 

выход редактора JSON должно быть что-то вроде этого: [IMG] http://i61.tinypic.com/2r61r0k.png

мне нужно поставить значение "ProcessParameterSchema" до "InputParameter". Мне нужно обновить «InputParameter» для каждого элемента в «ProcessApplicationList». Поскольку «ProcessApplicationList» - это массив, я не уверен, как это сделать. спасибо!

+0

Не могли бы вы объяснить немного больше ваших намерений. Json-schema просто позволяет вам проверять json на схему. Вы хотите адаптировать ответ, чтобы получить проверку схемы? Вы делаете горячие изменения в схеме из ответа, а затем используете результирующую схему для проверки? – jruizaranguren

+0

@jruizaranguren: Я обновил свой вопрос для получения дополнительной информации. Да, я хочу обновить мою json-схему каждый раз, когда получаю новый ответ, мне нужно обновить «InputParameter» для каждого элемента в «ProcessApplicationList», чтобы схема из «ProcessParameterSchema» отображалась в редакторе JSON. Спасибо. – user3916984

+0

Вы можете получить все возможные «ProcessParameterSchema» заранее? – jruizaranguren

ответ

0

Я не уверен, что это может быть применено к вашей конкретной ситуации, но общим решением будет использование json hyper-schema.

С гипер-схемой json вы можете определить доступные API-операции, используя свойство «schema» для определения допустимых форматов запросов. Схема ответа может быть связана через ссылки «href», поэтому клиент может обрабатывать динамически каждую возможную схему.

Второй вариант, если у вас есть всякая возможная вложенная схема на стороне клиента, заключается в том, чтобы выразить это через свойство «oneOf», которое содержит коллекцию «href» s. В этом случае вы можете использовать эти href для принятия правильных решений для проверки и рисования пользовательского интерфейса. Интересным вариантом этого было бы разрешить href's для поддержки действительных URI (что является способом взлома подхода HAL, описанного вначале).

+0

привет! Спасибо за ответ. я действительно прочитал об этом, но я смутился о том, как это сделать. Я пытаюсь найти похожий случай или ссылочный код, чтобы я мог иметь головной убор. – user3916984

+0

https://blog.heroku.com/archives/2014/5/20/heroku-http-api-toolchain – jruizaranguren

+0

спасибо. я постараюсь разобраться в этом. – user3916984

Смежные вопросы