如何使用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\”: