我正在尝试解析文件,以便将JSON数据发布到需要访问令牌的本地平台中。但出现此错误:org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject
。
我尝试了多种方法来修复它,但是我没有用。
这是代码: 这是我用来将csv文件转换为Json格式的部分
import java.io.File;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import java.io.DataInputStream;
import java.io.File;
//import org.json.JSONObject;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.json.simple.JSONArray;
public class CSVtoJSON {
public static void main(String[] args) throws Exception {
File input = new File("ArgosData_2020_05_24_22_21_59.csv");
File output = new File("output.json");
String access_token = "rxmqDZF0J1BCUIDm1Faw";
CsvSchema csvSchema = CsvSchema.builder().setUseHeader(true).build();
CsvMapper csvMapper = new CsvMapper();
// Read data from CSV file
List<Object> readAll = csvMapper.readerFor(Map.class).with(csvSchema).readValues(input).readAll();
ObjectMapper mapper = new ObjectMapper();
// Write JSON formated data to output.json file
mapper.writerWithDefaultPrettyPrinter().writeValue(output, readAll);
// Write JSON formated data to stdout
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(readAll));
然后我尝试发布数据,在这一部分中,我收到了错误消息:
try {
JSONParser parser = new JSONParser();
//Use JSONObject for simple JSON and JSONArray for array of JSON.
JSONObject data = (JSONObject) parser.parse(
new FileReader(output.getAbsolutePath()));//path to the JSON file.
System.out.println(data.toJSONString());
String paramValue = "param\\with\\backslash";
String yourURLStr = "http://host.com?param=" + java.net.URLEncoder.encode(paramValue, "UTF-8");
URL url2 = new URL("http://localhost:8080");
HttpsURLConnection conn = (HttpsURLConnection) url2.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Authorization", "Bearer" + access_token);
conn.setDoOutput(true);
OutputStream outStream = conn.getOutputStream();
OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
outStreamWriter.write(data.toJSONString());
outStreamWriter.flush();
outStreamWriter.close();
outStream.close();
String response = null;
System.out.println(conn.getResponseCode());
System.out.println(conn.getResponseMessage());
DataInputStream input1 = null;
input1 = new DataInputStream (conn.getInputStream());
while (null != ((response = input1.readLine()))) {
System.out.println(response);
input1.close ();
}
} catch (IOException | ParseException e) {
e.printStackTrace();
}
}
}
如果有什么方法的线索,我是编程新手,我将不胜感激能得到一些帮助。
答案 0 :(得分:1)
您正在编写对象列表,并尝试读取单个对象。
如果查看该文件,则可能会看到类似以下内容的内容:
[{"name": "Object1", value="1"}, {"name": "Object2"}, {"name": Object3"}]
。
使用JSONObject data = (JSONObject) parser.parse(...
,您尝试读取单个JSON对象,例如{"name":"i'm a single object' "value"="42"}
。
要解决迫在眉睫的问题,请按照消息提示使用JSONArray data
代替JSONObject
。
我对org.json.simple
不熟悉,无法找到该特定的库,因此我目前无法建议任何其他的代码段进行尝试。