微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Java更新JSON值

如何解决如何使用Java更新JSON值

我在json下方,我想更新该json的每个值,但有时只更新一个

{ 
"msgType": "NEW","code": "205","plid": "PLB52145",}

我已经尝试使用以下代码进行更新

FileReader reader = new FileReader(filePath);

JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);

System.out.println(jsonObject);


long id =Long.valueOf((String) idNewObj.get("plid"));
System.out.println(plid);


idNewObj.put("plid",PL809809809);

System.out.println(jsonObject);

解决方法

要进行JSON文件的转换/过滤,我建议使用面向流/事件的解析和生成,而不要使用任何对象映射。只是一个示例,它使用了简单轻巧的JSON解析器https://github.com/anatolygudkov/green-jelly

import org.green.jelly.AppendableWriter;
import org.green.jelly.JsonEventPump;
import org.green.jelly.JsonParser;

import java.io.StringWriter;
import java.io.Writer;

public class UpdateMyJson {
    private static final String jsonToUpdate = "{\n" +
            "\"msgType\": \"NEW\",\n" +
            "\"code\": \"205\",\n" +
            "\"plid\": \"PLB52145\",\n" +
            "}";

    public static void main(String[] args) {
        final StringWriter result = new StringWriter();

        final JsonParser parser = new JsonParser();
        parser.setListener(new MyJsonUpdater(result));
        parser.parse(jsonToUpdate); // if you read a file with a buffer,// call parse() several times part by part in a loop until EOF
        parser.eoj(); // and then call .eoj()

        System.out.println(result);
    }

    static class MyJsonUpdater extends JsonEventPump {
        private boolean isPlid;

        MyJsonUpdater(final Writer output) {
            super(new AppendableWriter<>(output));
        }

        @Override
        public boolean onObjectMember(final CharSequence name) {
            isPlid = "plid".contentEquals(name);
            return super.onObjectMember(name);
        }

        @Override
        public boolean onStringValue(final CharSequence data) {
            if (isPlid) {
                if ("PLB52145".contentEquals(data)) {
                    return super.onStringValue("PL809809809");
                }
            }
            return super.onStringValue(data);
        }
    }
}

道具:

  1. 文件/数据不需要完全加载到内存中,您可以毫无问题地处理megs / gigs
  2. 它的工作速度要快得多,尤其是对于大文件
  3. 使用这种模式很容易实现任何自定义类型/转换规则

标准Gson库和Jackson库都提供了令牌生成器,以流方式使用JSON。

已更新:使用了JsonEventPump

,

您需要将更新的JSON写入读取JSON的文件中。另外,我不了解您的变量分配,因此我也进行了更新。使用以下代码:

FileReader reader = new FileReader(filePath);

JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);

System.out.println(jsonObject);


long id =Long.valueOf((String) idNewObj.get("plid"));
System.out.println(id);


jsonObject.put("plid",PL809809809);

System.out.println(jsonObject);
FileWriter writer = new FileWriter(filePath,false); //overwrites the content of file
writer.write(jsonObject.toString());
writer.close();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?