Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 从文件中读取JSON数据以用于StringEntity_Java_String_Post_Filereader - Fatal编程技术网

Java 从文件中读取JSON数据以用于StringEntity

Java 从文件中读取JSON数据以用于StringEntity,java,string,post,filereader,Java,String,Post,Filereader,我试图从JSON文本文件中读取简单数据,并将其转换为StringEntity,以便在API POST请求中使用。虽然如果数据被硬编码为StringEntity,我的API post请求可以正常工作,但我很难成功解析数据。我在谷歌上搜索过的所有可能的解决方案都涉及数组,这对我来说太复杂了 以下是JSON文本文件的示例: { "data":"d1", "data2":"d2", "data3":"d3" } 下面是我用来尝试导入数据的代码 JSONParser parser = new JSONP

我试图从JSON文本文件中读取简单数据,并将其转换为StringEntity,以便在API POST请求中使用。虽然如果数据被硬编码为StringEntity,我的API post请求可以正常工作,但我很难成功解析数据。我在谷歌上搜索过的所有可能的解决方案都涉及数组,这对我来说太复杂了

以下是JSON文本文件的示例:

{
"data":"d1",
"data2":"d2",
"data3":"d3"
}
下面是我用来尝试导入数据的代码

JSONParser parser = new JSONParser();
    JSONObject a = new JSONObject();
    try {
        FileReader fileReader = new FileReader("/directory/file.json");
        a = (JSONObject) parser.parse(fileReader);
        } catch (Exception e1) {
        e1.printStackTrace();
        }
String data = a.toString();
StringEntity entity = new StringEntity(data);   
entity.setContentType(ContentType.APPLICATION_JSON.getMimeType());
request.addHeader("Accept", acceptHeader);
    request.setEntity(entity);
    HttpResponse response = client.execute(request);
我觉得我在某个地方真的很傻。我是新手。StringEntity是这样硬编码的,所以我需要这样导入和解析它:

StringEntity entity = new StringEntity("{\"data\":\"d1\",\"data2\":\"d2\",\"data3\":\"d3\"}");
使用的类别:

import org.json.JSONObject;
import org.json.JSONArray;
import org.json.simple.parser.JSONParser;

以防其他人感兴趣。。。由于无需解析或格式化JSON,最终得到以下解决方案:

String data;
data = new String(Files.readAllBytes(Paths.get("file.json")));
所需图书馆:

import java.nio.file.Paths;
import java.nio.file.Files;

以防其他人感兴趣。。。由于无需解析或格式化JSON,最终得到以下解决方案:

String data;
data = new String(Files.readAllBytes(Paths.get("file.json")));
所需图书馆:

import java.nio.file.Paths;
import java.nio.file.Files;

由于Java11您可以

var content = Files.readString(Pahts.get("file.json"));
JSONObject json = (JSONObject) new JsonParser().parse(content);

由于Java11您可以

var content = Files.readString(Pahts.get("file.json"));
JSONObject json = (JSONObject) new JsonParser().parse(content);

如果要返回json响应,为什么要解析已有的json?为什么不将文件作为文本读取并将该文本传递给
StringEntity
?我想将JSON数据作为StringEntity发送到一个单独的远程API。我正在构建的小程序是两个独立系统的中间人。我假设我需要将原始json文本文件解析为HttpPost更可接受的格式。我不需要这样做吗?好吧,json应该是json(如果它们都遵守规范),至少文本文件中的数据和硬编码的数据似乎没有什么不同-除了一些空白的差异,这不应该是一个问题(如果是的话,我怀疑是换行符,但你应该能够删除它们)。您是否尝试将文件内容直接传递给post?是否可以发布堆栈跟踪?如果希望返回json响应,为什么要解析已有的json?为什么不将文件作为文本读取并将该文本传递给
StringEntity
?我想将JSON数据作为StringEntity发送到一个单独的远程API。我正在构建的小程序是两个独立系统的中间人。我假设我需要将原始json文本文件解析为HttpPost更可接受的格式。我不需要这样做吗?好吧,json应该是json(如果它们都遵守规范),至少文本文件中的数据和硬编码的数据似乎没有什么不同-除了一些空白的差异,这不应该是一个问题(如果是的话,我怀疑是换行符,但你应该能够删除它们)。您是否尝试将文件的内容直接传递给post?是否可以发布堆栈跟踪?您是否声明
字符串数据
,并将值分配给两行
数据
,或者这只是一个输入错误?我进一步假设它不是
String.readAllBytes
而是
Files.readAllBytes()
,因此您的代码可能更像
String data=newstring(Files.readAllBytes(path.get(“file.json”)最后请注意,从字节数组创建字符串而不提供字符集是有风险的:如果文件的编码与系统的默认字符集不同,您将无法获得所需的字符串-因此明智的做法是始终为
字符串(字节[],xxx)提供字符集
constructor,其中
xxx
要么是字符集的名称,要么是字符集实例。是的,有一些拼写错误(很长的一天)。谢谢你对charset的提醒。我正在查看HttpPost进程的标题,因此我将添加它。为了澄清,根据问题,此代码段将继续转换为HttpPost的StringEntity。将其添加到post标题也会有所帮助,但您也应该将其添加到读取进程中(即,当您将字节数组转换为字符串时)。一般来说,每次从字符串转换为字节时,您都应该指定字符集,反之亦然,否则您就有可能在该位置发生编码错误。您是在声明
字符串数据
并在两行上将值分配给
数据
,还是仅仅是输入错误?我进一步假设它不是
String.readAllBytes
而是
Files.readAllBytes()
,因此您的代码可能更像
String data=newstring(Files.readAllBytes(path.get(“file.json”)最后请注意,从字节数组创建字符串而不提供字符集是有风险的:如果文件的编码与系统的默认字符集不同,您将无法获得所需的字符串-因此明智的做法是始终为
字符串(字节[],xxx)提供字符集
constructor,其中
xxx
要么是字符集的名称,要么是字符集实例。是的,有一些拼写错误(很长的一天)。谢谢你对charset的提醒。我正在查看HttpPost进程的标题,因此我将添加它。为了澄清,根据问题,此代码段将继续转换为HttpPost的StringEntity。将其添加到post标题也会有所帮助,但您也应该将其添加到读取进程中(即,当您将字节数组转换为字符串时)。通常,每次从字符串转换为字节时都应该指定字符集,反之亦然,否则就有可能在该位置发生编码错误。