Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GSON-更新.json文件_Java_Gson - Fatal编程技术网

Java GSON-更新.json文件

Java GSON-更新.json文件,java,gson,Java,Gson,有没有办法在不将文件加载到对象、更改值并再次保存的情况下更新JSON文件中的值? 听起来效率很低 编辑: 例如,我想将一个项目添加到某个数组中此问题的任何解决方案都需要以某种方式读取整个文件。任何现成的JSON库(如Gson)都将创建表示文本JSON元素的对象 为了避免创建对象的“开销”,可以创建一个特殊用途的解析器,但仍然需要读取整个文件。您可以通过依次读取一行,处理它,然后将其写入输出文件来减少所使用的内存量。在您描述的情况下,这将主要是写回行,而不是更改。这将更加有效,但可能需要一段时间来

有没有办法在不将文件加载到对象、更改值并再次保存的情况下更新JSON文件中的值? 听起来效率很低

编辑:
例如,我想将一个项目添加到某个数组中

此问题的任何解决方案都需要以某种方式读取整个文件。任何现成的JSON库(如Gson)都将创建表示文本JSON元素的对象

为了避免创建对象的“开销”,可以创建一个特殊用途的解析器,但仍然需要读取整个文件。您可以通过依次读取一行,处理它,然后将其写入输出文件来减少所使用的内存量。在您描述的情况下,这将主要是写回行,而不是更改。这将更加有效,但可能需要一段时间来实现,并且在您将它们全部解决之前可能会出现问题。最重要的是,如果JSON格式发生更改,您可能需要更改代码,然后完成解决可能引入的错误的过程

如果您不想编写自己的解析器,但JSON文件很大,并且不想一次将其全部读入内存,那么您可以查看Gson streaming:

现在,人们经常使用现成的库,因为它们可以更快地完成实现,并减少bug,即使执行时效率较低。除非效率低下对用户体验有可测量的影响,或者显著影响执行时间/内存利用率,否则这种做法可能是可以接受的,但是ymmv