我正在try 将解析后的数据存储在json文件中,以便进一步处理.请告诉我如何将新信息添加到现有Json文件中. 我将在下一个视图中存储数据:

{
"836" : {
              "announcGroup" : "Close",
              "onSiteFrom" : "Junie 2011",
              "phoneNumber" : "002325486584",
             }
}

我需要

{
"836" : {
              "announcGroup" : "clothes",
              "onSiteFrom" : "Junie 2011",
              "phoneNumber" : "002325486584",
             },
"856" : {
              "announcGroup" : "clothes",
              "onSiteFrom" : "Junie 2011",
              "phoneNumber" : "002325486157",
             }
}

我需要在JSONFile中添加新的解析数据.

首先,我将所有信息初始化在 map 字符串、 map 字符串、字符串中>>

package WebPageProceeder;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import Helpers.CheckString;
import WebPages.ConfigProvider.ConfigProvider;
import org.jsoup.Connection;
import org.jsoup.HttpStatusException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.*;
import org.jsoup.select.Elements;

import static ExcelFileWriters.JSONWriter.writeMapToJSON;
import static ExcelFileWriters.WriteInExcel.writeToExcelTable;
import static Helpers.CutString.clearString;
import static Helpers.WriteToFile.writeInFile;

public class JSoupParser {

    public static Map<String, Map<String, String>> parseWebPage(String linkToParse) throws IOException {

        Map<String, Map<String, String>> mainMapWebSiteInfo = new HashMap<>();
        Map<String, String> webPageInfo = new HashMap<>();

        Connection.Response response = Jsoup.connect(linkToParse).followRedirects(false).execute();
        System.out.println(response.statusCode() + " : " + response.url());
        response.statusCode();

        if (response.statusCode() == 200 || response.statusCode() == 302) {

            System.out.printf("Link \" %s  \" is available\n ", response.url());
            try {
                Document doc = Jsoup.connect(linkToParse)
                        .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0")
                        .get();
                Elements phoneNumber = doc.selectXpath("//*[@id=\"js-item-page\"]/div[1]/div[7]/div/div/dl[2]/dd/ul/li[1]/a");
                String phoneNumberValue = phoneNumber.attr("href");
                Elements onSiteFrom = doc.selectXpath("//*[@id=\"container\"]/div/section/aside/div[1]/div/dl/dd/span");
                String onSiteFromValue = onSiteFrom.text();
                Elements ownerName = doc.selectXpath("//*[@id=\"container\"]/div/section/aside/div[1]/div/dl/dd/a");
                String ownerNameValue = ownerName.text();
                

                webPageInfo.put("phoneNumber", clearString(phoneNumberValue, ':', 1));
                webPageInfo.put("onSiteFrom", clearString(onSiteFromValue,' ', 10));
                webPageInfo.put("announcGroup", announcGroupValue);
                writeInFile("C:\\GoodResults.txt",linkToParse);

                mainMapWebSiteInfo.put(clearString(linkToParse, '/',12), webPageInfo);

                writeMapToJSON(mainMapWebSiteInfo, ConfigProvider.jsonFoleForData);
            } catch (NullPointerException ex) {
                System.out.println("Announcement is not available 1");
                ex.printStackTrace();
            } catch (HttpStatusException ex) {
                System.out.println("Announcement is not available 2");
                // TODO To put the link is file with bad results
                writeInFile("C:\\BadResults.txt",linkToParse);
                System.out.println(ex.getMessage());
            } catch (IOException ex) {
                System.out.println("Announcement is not available 3");
                ex.printStackTrace();
            }
        } else {
            System.out.println("not possible to get page...");
            // TODO To put the link is file with unavailable results
            writeInFile("C:\\UnavailableResults.txt",linkToParse);
            System.out.println(response.statusMessage());
        }

        return mainMapWebSiteInfo;
    }
}

然后我try 将其写入JSONFile:

package ExcelFileWriters;

import WebPages.ConfigProvider.ConfigProvider;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.mysql.cj.xdevapi.JsonValue;

import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

public class JSONWriter {

    public static void writeMapToJSON(Map<String, Map<String, String>> hasmap, String filePath){
        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);
        ObjectWriter writer = mapper.writerWithDefaultPrettyPrinter();
        StringWriter out = new StringWriter();
        File file = new File(filePath);
        try {
            ObjectNode root = mapper.createObjectNode();
            ArrayNode parseddata = mapper.createArrayNode();
            if(!file.exists()){
                file.createNewFile();
                writeMapToJSON(hasmap, filePath);
            }else{
                writer.writeValue(file, hasmap);
            }    

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }


}

但每次我收到包含新数据的新文件时.

或者有人可以建议一种更有效的存储信息的方法,以便以后可以进一步处理和处理

推荐答案

我想这可以帮助你. try 将文件中的内容添加到 map 中,然后合并两个 map 并将完整 map 写入文件:

    public class JSONWriter {
    
        public static void writeMapToJSON(Map<String, Map<String, String>> hasmap, String filePath){
            ObjectMapper mapper = new ObjectMapper();
            mapper.enable(SerializationFeature.INDENT_OUTPUT);
            ObjectWriter writer = mapper.writerWithDefaultPrettyPrinter();
            File file = new File(filePath);
            try {
    
                if(!file.exists()){
                    file.createNewFile();
                    writeMapToJSON(hasmap, filePath);
                }else{
                    Map<String, Map<String, String>> existingJSONContent = readJsonFile(ConfigProvider.jsonFoleForData);
                    existingJSONContent.putAll(hasmap);
                    writer.writeValue(file, existingJSONContent);
                }
    
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

 public static Map<String, Map<String, String>> readJsonFile(String fileName){
        ObjectMapper mapper = new ObjectMapper();
        try{
            return mapper.readValue(new File(ConfigProvider.jsonFoleForData), Map.class);
        }catch(IOException ex){
            ex.printStackTrace();
            return new HashMap<>();
        }
    }
    
    
    }

Java相关问答推荐

收听RDX中用户数据的变化

CriteriaQuery with max

如何确定springboot在将json字段转换为Dto时如何处理它?

如何使用SpringBoot中的可分页对整数作为字符串存储在数据库中时进行排序

用户填充的数组列表永不结束循环

未找到适用于响应类型[类java.io.InputStream]和内容类型[Text/CSV]的HttpMessageConverter

匹配一组字符或另一组字符

S,要对Java复制构造函数深度克隆所有属性进行单元测试,最可靠的方法是什么?

如何在一行中使用Dijkstra中的Java Stream

由于在生成器模式中使用泛型,lambda表达式中的返回类型错误

Java页面筛选器问题

在Oracle JDBC连接中,连接失效和身份验证失效是什么意思?

如何读取3个CSV文件并在控制台中按顺序显示?(Java)

Cordova Android Gradle内部版本组件不兼容

Java 11 HttpCookie.parse在解析包含JSON的Cookie时引发IlLegalArgumentException

如何在运行docker的应用程序中获取指定的配置文件

嘲笑黄瓜中的对象

Maven-Dependency-Plugin 3.6.+开始查找在依赖关系:分析目标期间找到的新的使用的未声明依赖关系

无限递归Java问题

如何在Spring Boot Auth服务器上正确配置CORS?