解析JSON对象的文件并转换为JSON数组

时间:2018-05-15 12:40:25

标签: java json file

我有一个包含JSON对象的文件。我试图在我的java程序中使用其URL来访问该文件,以访问其内容,如下所示。

URL url = new URL(Url);
URLConnection request = url.openConnection();
request.connect();
JsonReader jr = new JsonReader(new InputStreamReader((InputStream) request.getContent()));
jr.setLenient(true);
JsonParser jp = new JsonParser();
JsonElement root = jp.parse(jr);

我必须使用jr.setLenient(true);,因为数据不是JSON对象,而是多个JSON对象。但是这种方法无法帮助我获取文件中的所有JSON对象。我试图获取所有JSON对象,遍历其中的每一个,然后将数据保存到我的数据库中。

我收到了以下网址收到的数据类型示例: Sample File

有没有办法让我可以获取文件中的所有对象来执行所需的操作。

此外,如果没有任何工作,我可以手动将数据手动保存到新文件中的JSON数组中,但每个JSON对象之间没有逗号分隔,这使我很难解析数据。

但是每个JSON对象都是一个新行。那么有没有办法根据它解析它。

2 个答案:

答案 0 :(得分:1)

@marekful建议修复JSON字符串以获得有效的

public static void main(String[] args) throws Exception {
    URL url = new URL("http://d1kv7s9g8y3npv.cloudfront.net/testsite/files/doc-lib/2018/05/15/10/21/48/448/head/test3.txt#");
    URLConnection request = url.openConnection();
    request.connect();
    final Object content = request.getContent();

    BufferedReader br = new BufferedReader(new InputStreamReader((InputStream) content));
    String inputLine;

    List<String> jsonEntries = new ArrayList<>();
    while ((inputLine = br.readLine()) != null) {
        jsonEntries.add(inputLine);
    }
    String jsonString = "["  + jsonEntries.stream().collect(Collectors.joining(",")) +"]";

    JsonParser jp = new JsonParser();
    JsonElement root = jp.parse(jsonString);
    System.out.println(root);
}

}

答案 1 :(得分:0)

我找到了一个适合我的解决方案

URL url = new URL(urlString.trim());
URLConnection request = url.openConnection();
request.connect();
BufferedReader in = new BufferedReader(
        new InputStreamReader(
                request.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) 
{
    jsonObject = new JSONObject(inputLine);
    jsonArray.put(jsonObject);
}
in.close();

我能够使用上述方法创建一个JSON数组,然后迭代该数组以根据我的要求保存数据