在json模式中使用jsonPath属性会返回随机字符串,而不是给定路径中的值

时间:2019-03-04 15:55:31

标签: javascript json mocking jsonschema faker

previous unresolved issue开始,我正在使用json-schema-fakerjson-server,目前正在尝试重用json模式中的某些数据。

我在Github的this页中找到了属性:jsonPath,其中准确地解释了我正在尝试做的事情和问题所在。

我正在尝试从生成这些数据的JavaScript应用程序以及我使用的库json-schema-faker site中测试该属性。通过上述任何一种方式使用此属性,将返回一个随机字符串,而不是我指的ID("jsonPath": "$..properties.test.items.properties.id"

enter image description here

使用this网站进行验证,不会引起任何问题,并且使用jsonPath可以正确获取我尝试重用的值。

我应该在JavaScript代码/模拟数据生成器中导入什么内容吗,或者json-schema版本可能不支持我尝试执行的操作?

我尝试使用的一些路径是:

$..id $..test.items.properties.id $..test.id

这是我的json模式:

{
  "title": "teest",
  "type": "object",
  "required": [
    "test"
  ],
  "properties": {
    "test": {
      "type": "array",
      "minItems": 1,
      "maxItems": 3,
      "uniqueItems": true,
      "items": {
        "type": "object",
        "required": [
          "id",
          "samples"
        ],
        "properties": {
          "id": {
            "type": "string",
            "enum": [
              "1,",
              "2",
              "3"
            ]
          },
          "samples": {
            "type": "array",
            "uniqueItems": true,
            "items": {
              "type": "object",
              "properties": {
                "test2": {
                  "type": "string",
                  "jsonPath": "$..properties.test.items.properties.id"
                }
              }
            }
          }
        }
      }
    }
  }
}

对此我将不胜感激,因为我无法在线找到任何东西,而且我真的不想使用硬编码值来模拟这些数据。

1 个答案:

答案 0 :(得分:0)

也许您已经找到了解决问题的方法,但万一其他人想知道解决方法:

type之前删除jsonPath,而不要删除

...
"items": {
    "type": "object",
    "properties": {
        "test2": {
            "type": "string", // Remove this line
            "jsonPath": "$..properties.test.items.properties.id"
        }
    }
}
...

将架构更改为

...
"items": {
    "type": "object",
    "properties": {
        "test2": {
            "jsonPath": "$..properties.test.items.properties.id"
        }
    }
}
...

json模式伪造者库不知道您要引用的对象的类型。因此,如果您提供一种类型,则json schmea伪造者将始终使用指定的随机生成的类型来覆盖您的相对值。 我也为此感到苦恼,因为不幸的是,没有提供该库的文档(大部分情况下),而且不够详尽。