我們目前正在調查JSON作爲我們系統的潛在API數據傳輸語言,並提出了有關使用JSON參考的問題。JSON參考非對象值
請看下面的例子:
{
"invoice-address" : { "street": "John Street", "zip": "12345", "city": "Someville" },
"shipping-address": { "$ref": "#/invoice-address" }
}
根據我們的研究,這是JSON參考的有效使用。我們用另一個包含引用的對象替換對象的實例,使用JSON指針片段指向不同的對象。
現在,JSON引用總是由一個鍵值對組成,因此必須包含在一個對象中。這意味着,爲了引用非對象數據類型(例如:zip
和city
串在上面的例子),你就必須做到以下幾點:
{
"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指針現在正確地指向字符串值,我們不得不將字符串zip
和city
的數據類型從字符串更改爲對象,這使得它們無法對我們的JSON模式進行驗證,因爲它將它們聲明爲字符串。
然而,JSON Reference draft狀態:
實現可以選擇替換的參考價值的參考。
這是否意味着在對JSON模式進行驗證之前,我們被允許對文件進行「預處理」並將JSON Reference對象替換爲已解析的字符串值?或者,引用僅限於對象類型?
感謝任何能夠闡明這一點的人。
我們將自行實施。我們的目標是儘可能地貼近可用的標準。如果將參考對象解析爲不同的類型並不矛盾,那我們很好。謝謝。 – Dienes
沒問題。只要在文檔中完全無歧義地說「JSON引用應該在驗證發生之前就地解析」,我就沒有看到任何錯誤。 – cloudfeet
我用'tv4'做了一些實驗,它似乎在數據本身中不允許'$ ref'。這是'tv4'的限制還是僅在模式定義中允許的引用? – Dienes