当前位置: 首页 > 知识库问答 >
问题:

尝试使用net minidev json更新json数组,但得到强制转换错误

东典
2023-03-14
public static JSONArray updateJsonFields(JSONArray json, LinkedHashMap fieldMap) {
    JSONArray updatedJson = new JSONArray();
    int sizeJson = json.size();
    for(int i = 0 ; i < sizeJson ; i++) {
        ((LinkedHashMap) json.get(i)).forEach((key, value) -> {
            if(key.equals("responseHeaders")) {
                ((LinkedHashMap) value).forEach((fieldKey, fieldValue ) -> {
                    if(fieldKey.equals("Date")){
                        ((LinkedHashMap) fieldValue).put("Date", fieldMap.get("Date"));
                    } else if( fieldKey.equals("TransID") ) {
                        ((LinkedHashMap) fieldValue).put("TransID", fieldMap.get("TransID"));
                    }
                });
            } else if (key.equals("requestTimeStamp")) {
                ((LinkedHashMap) value).put("requestTimeStamp", fieldMap.get("requestTimeStamp"));
            } else if (key.equals("responseTime")) {
                ((LinkedHashMap) value).remove("responseTime");
            }
        });
    }
    return updatedJson;
}

使它困惑的还有remove方法返回相同的错误。到目前为止,我还没有在Java中使用过LinkedHashMaps,所以我不确定我需要做什么。我已经找了大约两天了,似乎找不到我需要的答案。

如有任何帮助,不胜感激。

谢谢你。

共有1个答案

公孙国兴
2023-03-14

在Java中进行JSON转换时有一些已知的怪异之处,请阅读以下内容:https://github.com/intuit/karate/issues/787

因此,我强烈建议在本例中直接在空手道中执行JSON操作。

更新和删除非常容易。以下是一些例子:

* def temp = { foo: 'bar' }
* temp.foo = 'hello'
* match temp == { foo: 'hello' }
* temp.bar = 'world'
* match temp == { foo: 'hello', bar: 'world' }

# * remove temp.foo
* karate.remove('temp', '$.foo')
* match temp == { bar: 'world' }
 类似资料:
  • 我希望将一个< code>int数组转换为一个< code>double数组。 所以,当我有 我想使用,比如说把它作为参数传递给一个方法。 最好的方法是什么? 演员阵容 不工作。 我可以迭代通过: 有没有更好的方法来做到这一点? <代码>系统。arraycopy不起作用——不适用于两种不同基元类型的数组。 注意:在Java和其他一些讨论中,我们看到了将对象转换为数组。 蒂亚。

  • 问题内容: 试图通过类强制转换异常在这里: 抛出此异常: 我不明白这一点-因为该类是由xjc.bat工具生成的-并且它生成的类我完全没有改变-所以这里应该没有强制转换问题- 解组员应该真的给了我一个类可以强制转换为FooClass。 关于我在做什么错的任何想法吗? 问题答案: 是否有注释?如果没有,请尝试: 这基于非官方的JAXB指南。

  • 我已经附加了一个设备和模拟器。当我试图用Genymobile投屏时,我得到的是: 信息:scrcpy 1.10 https://github.com/genymobile/scrcpy adb:错误:无法获得功能集:多个设备/模拟器

  • 我正在尝试从地图转换键iterable,但当我这样做时,我得到错误: 统计数字produceTypeData。钥匙不是一种功能 我将遵循这个问题的答案:如何将映射键转换为数组?让它工作。 当我尝试另一种方法(使用)时,我得到一个不同的错误,即: 类型IterableIterator不是数组类型。 在评论中我读到,在本例中,应该将数组括起来。扩展语法中的from()语句,但当我这样做时,我也会得到错

  • 我一直从这段代码中得到这个错误,不知道为什么{“error:CastError:Cast to ObjectId对于模型\“Order\”的路径\“u id\”处的值\“confirmed\”失败 正如您所看到的,我甚至没有在这个查询中使用objectID。。。我不知道它为什么要退回这个

  • 那么谁能解释一下这里的区别是什么,为什么java会做这样的设计呢?多谢了。 编辑:一个类似的问题