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

JSON行为。put()和。累加()追溯更改值

吴康平
2023-03-14

当我试图将多个对象累积到一个JSONObject中时,我有一个非常奇怪的交互。

我正在使用json-20180813.jar导入的库

请参阅下面的代码

    import org.json.JSONObject;

    JSONObject masterobject = new JSONObject();
    JSONObject testobject = new JSONObject();

    testobject.put("Key1","Value1");
    testobject.put("Key2","Value2");
    masterobject.accumulate("masterkey1",testobject);
    System.out.println(masterobject.toString(1));
    System.out.println("~~~~~~~~~~~~~~~~~");

    testobject.put("Key1","Value3");
    System.out.println(masterobject.toString(1));

预期输出如下:

主密钥{value2 value1}

非主键{value2 value3}

相反,我最终得到了这个

{"masterkey1": {
 "Key2": "Value2",
 "Key1": "Value1"
}}
~~~~~~~~~~~~~~~~~
{"masterkey1": {
 "Key2": "Value2",
 "Key1": "Value3"
}}

我的问题是,为什么. put()对万能钥匙有影响?

注意:如果我使用第二个新的JSONObject()并累积该对象,这个问题就解决了,但是我想知道为什么。put()编辑另一个对象。

共有1个答案

令狐烨烨
2023-03-14

问题是。put()正在修改存储在masterkey1键下的对象。

因为在Java中,一切都是用指针而不是值来表示的,所以当您修改testobject时,您还可以看到masterobject中的变化

 类似资料:
  • 如果你想查看某个文件的某一行是谁修攺的,可以使用文件逐行追溯功能. 执行文件逐行追溯操作,会显示某个文件每一行的详细攺动信息,也可以说是每一行的注释, 注释包括修订版本号、提交者、提交日期以及提交次数. 如何进行文件逐行追溯? 其实就是执行git annotate命令,同git blame. 在Android Studio中执行annotate的操作路径有下面这几个: 方法一: 右击文件左边状态栏

  • 我需要一些帮助,我不知道怎么做,但我的和<code>放入http。来自angular客户机的删除请求在中更改。我唯一的错误是: 如果有人有想法,谢谢回答我。 祝你今天愉快

  • 问题内容: 我正在运行一个基本脚本,该脚本遍历嵌套字典,从每个记录中获取数据,并将其附加到Pandas DataFrame。数据看起来像这样: 总共有几百万条记录。脚本本身如下所示: 但是,这非常缓慢。在寻找并行化方法之前,我只是想确保我没有错过任何明显的东西,这些东西可以使它按原样更快地执行,因为我对Pandas还是很陌生。 问题答案: 我还在循环中使用了数据框的 append 函数,感到困惑的

  • 问题内容: 在numpy中,我们可以获取对引发错误的警告的回溯。 是否有跟踪警告的一般方法? 发出警告时,我可以使python进行追溯吗? 问题答案: 通过分配给,您可以获得想要的东西。该警告模块文档本身建议您这样做,所以它不是你被诱惑的 源黑暗的一面 。:) 您可以通过分配给,将其替换为替代功能。 您可以定义一个新函数,该函数可以正常执行操作,并且还可以打印堆栈。然后,将其放置而不是原始放置:

  • 问题内容: 有没有一种方法可以修改.class文件,以便向某些方法添加Java注释?基本上,我想遍历jar文件中每个类文件的方法并注释某些方法。请注意,使用jar文件时,这不是在运行时。相反,完成后,我想使用注释修改类文件。 我确实可以访问源代码,因此,如果有一个自动的源代码修改器,那也可以工作… 我假设我需要Javassist或ASM之类的工具。如果是这样,我应该使用哪一个,我将如何处理? 问题

  • 问题内容: 我正在研究一个第三方开发人员用来为我们的核心应用程序编写扩展的Python库。 我想知道引发异常时是否可以修改回溯,因此最后一个堆栈帧是对开发人员代码中库函数的调用,而不是对引发异常的库中的行的调用。堆栈底部还有一些框架,其中包含对第一次加载我理想上也希望删除的代码时使用的函数的引用。 在此先感谢您的任何建议! 问题答案: 不更改回溯怎么办?您要求的两件事都可以通过不同的方式轻松完成。