2014-02-24 131 views
1

我們目前正在調查JSON作爲我們系統的潛在API數據傳輸語言,並提出了有關使用JSON參考的問題。JSON參考非對象值

請看下面的例子:

{ 
    "invoice-address" : { "street": "John Street", "zip": "12345", "city": "Someville" }, 
    "shipping-address": { "$ref": "#/invoice-address" } 
} 

根據我們的研究,這是JSON參考的有效使用。我們用另一個包含引用的對象替換對象的實例,使用JSON指針片段指向不同的對象。

現在,JSON引用總是由一個鍵值對組成,因此必須包含在一個對象中。這意味着,爲了引用非對象數據類型(例如:zipcity串在上面的例子),你就必須做到以下幾點:

{ 
    "invoice-address" : { "street": "John Street", "zip": "12345", "city": "Someville" }, 
    "shipping-address": { "street": "Doe Street", "zip": { "$ref": "#/invoice-address/zip" }, "city": { "$ref": "#/invoice-address/city" } } 
} 

即使JSON指針現在正確地指向字符串值,我們不得不將字符串zipcity的數據類型從字符串更改爲對象,這使得它們無法對我們的JSON模式進行驗證,因爲它將它們聲明爲字符串。

然而,JSON Reference draft狀態:

實現可以選擇替換的參考價值的參考。

這是否意味着在對JSON模式進行驗證之前,我們被允許對文件進行「預處理」並將JSON Reference對象替換爲已解析的字符串值?或者,引用僅限於對象類型?

感謝任何能夠闡明這一點的人。

回答

1

我不希望大多數驗證器在驗證之前解析JSON引用。你既可以:

  • 驗證
  • 之前解決JSON參考適應JSON架構允許JSON參考在某些地方

個人物,我覺得第一個選項是非常整潔。

您可能最終得到循環引用我想 - 我不知道您使用的驗證器/語言,但tv4肯定可以處理它。

+0

我們將自行實施。我們的目標是儘可能地貼近可用的標準。如果將參考對象解析爲不同的類型並不矛盾,那我們很好。謝謝。 – Dienes

+0

沒問題。只要在文檔中完全無歧義地說「JSON引用應該在驗證發生之前就地解析」,我就沒有看到任何錯誤。 – cloudfeet

+0

我用'tv4'做了一些實驗,它似乎在數據本身中不允許'$ ref'。這是'tv4'的限制還是僅在模式定義中允許的引用? – Dienes