java Shiftr需要Map类型的规范,得到ArrayList

nhaq1z21  于 11个月前  发布在  Java
关注(0)|答案(1)|浏览(87)

我正在使用nifi-JoltTransformJson处理器[1.9.2]版本,我有一个输入json,如下所示,其中spec json作为属性。
输入JSON:

{
"Your order":
{
"order_id":2116,
"products":[
{
"productId":"abc",
"productName":"Headphones",
"Cost":500
},
{
"productId":"cad",
"productName":"Laptop",
"Cost":89000
}
],
"total":90000
},
"location":{
"address":"No: 1338 MIG-1 Asian"
}
}

字符串
规格:

[
  {
    "operation": "shift",
    "spec": {
      "location": "counterTop"
    }
    }
]


我在demo-jolt站点链接上收到预期输出:http://jolt-demo.appspot.com/#inception
但在Nifi-1.9.2版本我收到以下错误:
nifi-logs上的错误:

com.bazaarvoice.jolt.exception.SpecException: Shiftr expected a spec of Map type, got ArrayList
    at com.bazaarvoice.jolt.Shiftr.<init>(Shiftr.java:480)
    at org.apache.nifi.processors.standard.util.jolt.TransformFactory.getTransform(TransformFactory.java:44)
    at org.apache.nifi.processors.standard.JoltTransformJSON.createTransform(JoltTransformJSON.java:348)
    at org.apache.nifi.processors.standard.JoltTransformJSON.lambda$setup$0(JoltTransformJSON.java:324)
    at org.apache.nifi.processors.standard.JoltTransformJSON$$Lambda$752/36325009.load(Unknown Source)
    at com.github.benmanes.caffeine.cache.BoundedLocalCache$BoundedLocalLoadingCache.lambda$new$0(BoundedLocalCache.java:3366)
    at com.github.benmanes.caffeine.cache.BoundedLocalCache$BoundedLocalLoadingCache$$Lambda$240/1329040766.apply(Unknown Source)
    at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2039)
    at com.github.benmanes.caffeine.cache.BoundedLocalCache$$Lambda$756/2085882783.apply(Unknown Source)
    at java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1853)
    at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2037)
    at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2020)
    at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:112)
    at com.github.benmanes.caffeine.cache.LocalLoadingCache.get(LocalLoadingCache.java:67)
    at org.apache.nifi.processors.standard.JoltTransformJSON.getTransform(JoltTransformJSON.java:316)
    at org.apache.nifi.processors.standard.JoltTransformJSON.onTrigger(JoltTransformJSON.java:277)
    at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
    at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1171)
    at org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:209)
    at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:117)
    at org.apache.nifi.engine.FlowEngine$2.run(FlowEngine.java:110)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)


有什么建议来克服这个问题吗?

c6ubokkw

c6ubokkw1#

尝试将规范改为这样,它会工作。你只需要重新填充数组中的每个项目,并再次填充JSON中的数组。对我来说很有效
[ {“operation”:“shift”,“spec”:{“locations”:{“":{“@":“countertop[]”} },“":{“@":“&”} ]

相关问题