我在序列中使用了JsonTransform中介器,以确保数据库查询中的电话号码字段以字符串而不是数字的形式返回.

<jsontransform description="JSON Transform" schema="conf:custom/mySchema.json">

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "nodes": {
      "type": "object",
      "properties": {
        "node": {
      "type": "array",
      "items": {
        "type": "object",
            "properties": {
              "phone": {
        "type": "string"
              }
        }
      }
    }
      }
    }
  }
}

问题是该字段也可以为空.如果该字段不为空,则中介程序可以正常工作,但如果为空,则会出现以下异常:

JsonNull java.lang.UnsupportedOperationException: JsonNull
    at com.google.gson.JsonElement.getAsString(JsonElement.java:192)
    at org.apache.synapse.commons.json.jsonprocessor.validators.ObjectValidator.validateAndUpdateEntriesMap(ObjectValidator.java:349)

我使用JsonTransform是因为我认为这是确保字段是字符串的推荐方法,但在WSO2文档中没有JsonTransform示例,其中字段也可以为空.我试着添加了

<property name="synapse.commons.enableXmlNullForEmptyElement" value="false"/>

<property name="synapse.commons.json.output.autoPrimitive" value="true"/>

但我还是得到了同样的例外我对使用其他中介的解决方案持开放态度,但希望不必编写自定义中介来判断空值.

推荐答案

只需指定这两种类型,如here.

"phone": { "type": ["string", "null"] }

Json相关问答推荐

使用SQL查询从SON中查找第n个密钥对值

中间初始化的Jolt配置

在Golang中从 struct 手动创建JSON对象

Jolt变换将字段移动到数组的每个元素中

来自json的可分析的构建报告

Azure数据工厂-WEB活动输出赢得';t返回JSON

使用 JOLT 将日期格式转换为 JSON

APIM 生成 JsonArray 到 EventHub

如何修复通过在 tsconfig.json 文件中添加allowImportingTsExtensions引发的错误 TS5023?

小写嵌套特定键的震动转换

try 使用 JQ 转换 JSON 中过于复杂的对象数组

无法在 json --data 中使用变量

阅读 JSON 正文 Firebase 云函数

在 rust 中从 API 反序列化 serde_json

如何使用 ConfigurationBuilder 解析现有的 json 字符串(不是文件)

如何使用 C# 将 JSON 文本转换为对象

数据包含连续问号时无法理解的 jQuery $.ajax() 行为

在自定义 JsonConverter 的 ReadJson 方法中处理空对象

运算符不存在:json = json

jq:按属性分组和键