Java 从文件中读取JSON数据以用于StringEntity
我试图从JSON文本文件中读取简单数据,并将其转换为StringEntity,以便在API POST请求中使用。虽然如果数据被硬编码为StringEntity,我的API post请求可以正常工作,但我很难成功解析数据。我在谷歌上搜索过的所有可能的解决方案都涉及数组,这对我来说太复杂了 以下是JSON文本文件的示例: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
{
"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标题也会有所帮助,但您也应该将其添加到读取进程中(即,当您将字节数组转换为字符串时)。通常,每次从字符串转换为字节时都应该指定字符集,反之亦然,否则就有可能在该位置发生编码错误。