如何使用java读取JSON对象文件并将其传递给请求
我正在使用以下代码:-如何使用java读取JSON对象文件并将其传递给请求,java,json,api,Java,Json,Api,我正在使用以下代码:- import org.json.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.junit.Assert; import org.junit.Test; import network.Authorization; import network.ContentType; import network.HTTPHelper;
import org.json.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.junit.Assert;
import org.junit.Test;
import network.Authorization;
import network.ContentType;
import network.HTTPHelper;
import network.HTTPRequest;
import network.HTTPResponse;
import static org.junit.Assert.*;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public void testSendPOSTRequest() {
try {
HTTPRequest request = new HTTPRequest();
request.url = "https://myURL/api/products";
request.contentType = ContentType.JSON;
Map<String, String> authKeyValue = new HashMap<>();
authKeyValue.put(Authorization.Type.toString(), "Token token=zkz,email=test7@gmail.com");
request.setAuthorization(authKeyValue);
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(new FileReader("./src//productApi"));
JSONObject jsonObject = (JSONObject) obj;
String name = (String) jsonObject.get("Name");
String author = (String) jsonObject.get("Author");
JSONArray companyList = (JSONArray) jsonObject.get("Company List");
System.out.println("Name: " + name);
System.out.println("Author: " + author);
System.out.println("\nCompany List:");
Iterator<String> iterator = companyList.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
} catch (Exception e) {
e.printStackTrace();
}
HTTPHelper helper = new HTTPHelper();
HTTPResponse response = helper.sendPOSTRequest(request);
System.out.println("POST Success");
System.out.println("Response code: " +response.statusCode.toString());
System.out.println("Payload: " +response.payload);
assertTrue(true);
} catch (Exception e) {
System.out.println(""+e.getMessage());
assertTrue(false);
} finally {
System.out.println("Exist Run");
}
import org.json.JSONArray;
导入org.json.simple.JSONObject;
导入org.json.simple.parser.JSONParser;
导入org.junit.Assert;
导入org.junit.Test;
进口网络。授权;
导入network.ContentType;
导入network.HTTPHelper;
导入network.HTTPRequest;
导入network.HTTPResponse;
导入静态org.junit.Assert.*;
导入java.io.FileReader;
导入java.util.HashMap;
导入java.util.Iterator;
导入java.util.Map;
公共void testSendPOSTRequest(){
试一试{
HTTPRequest请求=新建HTTPRequest();
request.url=”https://myURL/api/products";
request.contentType=contentType.JSON;
Map authKeyValue=新的HashMap();
authKeyValue.put(Authorization.Type.toString(),“Token-Token=zkz,email=test7@gmail.com");
request.setAuthorization(authKeyValue);
JSONParser=新的JSONParser();
试一试{
objectobj=parser.parse(新文件读取器(“./src//productApi”);
JSONObject JSONObject=(JSONObject)对象;
字符串名称=(字符串)jsonObject.get(“名称”);
stringauthor=(String)jsonObject.get(“author”);
JSONArray companyList=(JSONArray)jsonObject.get(“公司列表”);
System.out.println(“名称:”+Name);
System.out.println(“作者:+作者”);
System.out.println(“\n公司列表:”);
迭代器迭代器=companyList.Iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}捕获(例外e){
e、 printStackTrace();
}
HTTPHelper=新的HTTPHelper();
HTTPResponse response=helper.sendPOSTRequest(请求);
System.out.println(“成功后”);
System.out.println(“响应代码:+Response.statusCode.toString());
System.out.println(“有效载荷:+响应有效载荷”);
资产真实(真实);
}捕获(例外e){
System.out.println(“+e.getMessage());
资产真(假);
}最后{
System.out.println(“存在-运行”);
}
我在下面的行中也遇到了错误:-
Iterator<String> iterator = companyList.iterator();
Iterator Iterator=companyList.Iterator();
Eclipse显示为提示/错误为:-
类型JSONArray的方法迭代器()未定义
添加到
有谁能给我一个以上问题的解决方案或任何替代方法,这样我就可以从文件中读取JSON对象并将其直接传递给负载,因为请求可以用于JSON序列化/反序列化 例如:
ObjectMapper objectMapper = new ObjectMapper();
String carJson =
"{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";
try {
Car car = objectMapper.readValue(carJson, Car.class);
System.out.println("car.brand = " + car.brand);
System.out.println("car.doors = " + car.doors);
} catch (IOException e) {
e.printStackTrace();
}
Jackson的ObjectMapper可用于JSON序列化/反序列化 例如:
ObjectMapper objectMapper = new ObjectMapper();
String carJson =
"{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";
try {
Car car = objectMapper.readValue(carJson, Car.class);
System.out.println("car.brand = " + car.brand);
System.out.println("car.doors = " + car.doors);
} catch (IOException e) {
e.printStackTrace();
}
使用,您可以从如下文件中读取:
final InputStream is =
Thread.currentThread().getContextClassLoader().getResourceAsStream(filename);
String data=null;
try {
data = new ObjectMapper().readValue(is, String.class);
} catch (final Exception e) {
//Handle errors
}
然后,将此字符串数据添加到http请求非常简单。使用,您可以从如下文件中读取:
final InputStream is =
Thread.currentThread().getContextClassLoader().getResourceAsStream(filename);
String data=null;
try {
data = new ObjectMapper().readValue(is, String.class);
} catch (final Exception e) {
//Handle errors
}
然后,将这个字符串数据添加到http请求中是很简单的。假设您使用的是
org.json.JSONArray
对象
关于您遇到的“迭代器()未定义”问题。您之所以会遇到这个问题,是因为iterator()
没有为JSONArray
类定义
如果确实要打印出JSONArray
对象,可以使用以下命令:
System.out.println(companyList);
for(int i = 0; i < companyList.length(); i++){
Object obj = companyList.get(i); //Then use obj for something.
}
而不是
Iterator<String> iterator = companyList.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
您还可以通过执行以下操作循环JSONArray中的对象:
System.out.println(companyList);
for(int i = 0; i < companyList.length(); i++){
Object obj = companyList.get(i); //Then use obj for something.
}
for(int i=0;i
如果您知道这些数据类型,那么您也可以向我们介绍其中的任何一种。假设您使用的是
org.json.JSONArray
对象
关于您遇到的“迭代器()未定义”问题。您之所以会遇到这个问题,是因为iterator()
没有为JSONArray
类定义
如果确实要打印出JSONArray
对象,可以使用以下命令:
System.out.println(companyList);
for(int i = 0; i < companyList.length(); i++){
Object obj = companyList.get(i); //Then use obj for something.
}
而不是
Iterator<String> iterator = companyList.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
您还可以通过执行以下操作循环JSONArray中的对象:
System.out.println(companyList);
for(int i = 0; i < companyList.length(); i++){
Object obj = companyList.get(i); //Then use obj for something.
}
for(int i=0;i
如果您知道数据类型,那么您也可以向我们提供任何数据类型。我会使用一些专门的库,如gson或Jackson,将您的JSON映射到beanI。我有一个使用apache http客户端的示例。这样可以吗?为什么需要先读取JSON的内容?如果您只想发送文件的内容,为什么不这样做帽子?我确信你正在使用的HTTP库可以做到这一点。但是你还没有告诉我们,你正在使用哪个HTTP库,所以我不能告诉你任何细节。@BenGreen->我只想从文件中读取JSON对象,并想将其作为请求传递给负载。如果它工作相同,请share@toKrause->我还添加了所有t他出于同样的原因导入。如果你想要更多的附加信息,而我没有这些信息,请告诉我我会使用一些专门的库,如gson或Jackson,将你的JSON映射到beanI。我有一个使用apache http客户端的示例。这样可以吗?为什么需要先阅读JSON的内容?如果你只想发送文件的内容,为什么不直接这样做呢?我确信你正在使用的HTTP库可以直接这样做。但是你还没有告诉我们,你正在使用哪个HTTP库,所以我不能告诉你任何细节。@BenGreen->我只想从文件中读取JSON对象,并想将其作为请求传递给负载。如果它工作相同,请share@toKrause->出于同样的原因,我还添加了所有导入。如果您想要更多我缺少的附加信息,请让我知道。谢谢回复,但很抱歉,我需要从JSON文件中读取一个文件。我不想要字符串carJson=“{\”brand\”: