使用JSON模式引用获取URL并对其进行操作

时间:2017-07-13 15:31:32

标签: javascript json ajax http jsonschema

我有带引用的JSON模式。我必须发出一个http请求来获取带引用的JSON模式.Below是我在Javascript中的HTTP请求调用。

var request = new XMLHttpRequest();
request.open('POST', 'http://www.jsonschema.com/src/JSON_schemas/json_1.json', false);  
request.send(null);
if (request.status === 200) {
  return JSON.parse(request.responseText);
}
else
  return {};

我将JSON模式设为请求,如下所示。(json_1.json as request.responseText)

{
  "$schema" : "http://...",
  "id" : "67",
  "type" : "object",
  "properties": {
    "accountId": {
      "type": "string"
    },
    "alternateIds": {
       "$ref": "../V1/alternate_ids.json"
     },
     "associations": {
       "$ref": "../V1/associations.json"
     },
     "layers": {
       "type": "array",
       "$ref": "../V1/account_layers.json"
     },
     "transactions": {
       "$ref": "transactions.json",
       "description": "This is an optional field."
     }
  }
}

现在我将如何打电话来获取" ../ V1 / alternate_ids.json" JSON文件?

基本上我应该将'http://www.jsonschema.com/src/JSON_schemas/json_1.json'的网址替换为'http://www.jsonschema.com/src/V1/alternate_ids.json',以便进行正确的通话。

但是,我将如何以编程方式实现对URL的这种操作?

基本上,ref是远程计算机中文件系统的路径。所以我有基本URL,当我看到ref时,我应该更改我的URl以获取引用的文件

1 个答案:

答案 0 :(得分:0)

您可以尝试以下代码:

var basicUrl = "http://www.jsonschema.com/src"
var jsonSchema = JSON.parse(request.responseText);
var jsonProperties = jsonSchema['properties']; 
var alternateIdsRef = jsonProperties['alternateIds']['$ref'];
var truncatedRef = alternateIdsRef.split('..').pop();
var myUrl = basicUrl +  truncatedRef;
console.log(myUrl);

说明:

JSON对象基本上是一个JavaScript对象,然后可以使用JavaScript对象的相同点/括号表示法在其中访问数据:   jsonSchema['properties']

split()将一个字符串拆分(分割)成一个子串数组。

pop()删除数组的最后一个元素,并返回该元素。