Json比较异常:Can';t在java中访问getJSONArray
我使用的代码:Json比较异常:Can';t在java中访问getJSONArray,java,json,Java,Json,我使用的代码: JSON1: { "array1": [ { "id": "1", "Name": "Xytrex Co.", "Description": "Industrial Cleaning Supply Company", "Account Number": "ABC15797531", "Address": { "Permanent": { "Street": "st.road"
JSON1:
{
"array1": [
{
"id": "1",
"Name": "Xytrex Co.",
"Description": "Industrial Cleaning Supply Company",
"Account Number": "ABC15797531",
"Address": {
"Permanent": {
"Street": "st.road",
"pin": "789723"
},
"Temporary": {
"Street": "st.road",
"pin": "789723"
}
}
},
{
"id": "2",
"Name": "Xytrex Co.",
"Description": "Industrial Cleaning Supply Company",
"Account Number": "ABC15797531",
"Address": {
"Permanent": {
"Street": "st.road",
"pin": "789723"
},
"Temporary": {
"pin": "789723"
}
}
}
]
}
JSON2:
{
"array2": [
{
"id": "1",
"Name": "Xytrex Co.",
"Description": "Industrial Cleaning Supply Company",
"Account Number": "ABC15797531",
"Address": {
"Permanent": {
"Street": "st.road",
"pin": "789723"
},
"Temporary": {
"Street": "st.road",
"pin": "789723"
}
}
},
{
"id": "2",
"Name": "Xytrex Co.",
"Description": "Industrial Cleaning Supply Company",
"Account Number": "ABC15797531",
"Address": {
"Permanent": {
"Street": "st.road",
"pin": "789723"
},
"Temporary": {
"Street": "st.road",
"pin": "789723"
}
}
}
]
}
我所期望的结果是,id:“2”
下的JSON1
中缺少键Street
,或者类似的东西,它们提供了适当的信息,帮助我们识别缺少的键以执行Junit
测试
我在IDE中得到的错误是
package com.company;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.skyscreamer.jsonassert.JSONAssert;
import org.skyscreamer.jsonassert.JSONCompareMode;
import com.google.gson.JsonParser;
import org.skyscreamer.jsonassert.JSONCompareMode;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class Main {
public static void main(String[] args) throws FileNotFoundException {
Main cmp = new Main();
cmp.myTest();
}
public void myTest() throws FileNotFoundException {
JsonParser Parser = new JsonParser();
JsonObject obj1 = (JsonObject) Parser.parse(new
FileReader("/home/cloudera/Desktop/SampleJson/src/JSON1.json"));
JsonArray array1 = obj1.getAsJsonArray("array1");
JsonObject obj2 = (JsonObject)Parser.parse(new
FileReader("/home/cloudera/Desktop/SampleJson/src/JSON2.json"));
JsonArray array2 = obj1.getAsJsonArray("array2");
JSONAssert.assertEquals(array1, array2, JSONCompareMode.STRICT);
}
}
请帮我解决这个问题。我认为您对
JSONArray
对象类的初始化在这些行中似乎不正确
"java: cannot access org.json.JSONArray
class file for org.json.JSONArray not found".
您没有在方法getAsJsonArray()
中传递正确的参数。您传递了一个硬编码值“array1”
和“array2”
,该值不是要转换为JSONArray
的正确值
看看我认为在这些行中,
JSONArray
对象类的初始化似乎不正确
"java: cannot access org.json.JSONArray
class file for org.json.JSONArray not found".
您没有在方法getAsJsonArray()
中传递正确的参数。您传递了一个硬编码值“array1”
和“array2”
,该值不是要转换为JSONArray
的正确值
如果您只想知道它们之间的不同,请查看一下(我将
array2
更改为array1
以比较它们的内容)
pom文件如下所示
public class GsonClient {
public static void main(String[] args) throws Exception {
GsonClient cmp = new GsonClient();
cmp.myTest();
}
private void myTest() throws FileNotFoundException, JSONException {
String json1Str = "{\n" +
" \"array1\": [\n" +
" {\n" +
" \"id\": \"1\",\n" +
" \"Name\": \"Xytrex Co.\",\n" +
" \"Description\": \"Industrial Cleaning Supply Company\",\n" +
" \"Account Number\": \"ABC15797531\",\n" +
" \"Address\": {\n" +
" \"Permanent\": {\n" +
" \"Street\": \"st.road\",\n" +
" \"pin\": \"789723\"\n" +
" },\n" +
" \"Temporary\": {\n" +
" \"Street\": \"st.road\",\n" +
" \"pin\": \"789723\"\n" +
" }\n" +
" }\n" +
" },\n" +
"\n" +
"{\n" +
" \"id\": \"2\",\n" +
" \"Name\": \"Xytrex Co.\",\n" +
" \"Description\": \"Industrial Cleaning Supply Company\",\n" +
" \"Account Number\": \"ABC15797531\",\n" +
" \"Address\": {\n" +
" \"Permanent\": {\n" +
" \"Street\": \"st.road\",\n" +
" \"pin\": \"789723\"\n" +
" },\n" +
" \"Temporary\": {\n" +
" \"pin\": \"789723\"\n" +
" }\n" +
" }\n" +
"}\n" +
" ]\n" +
" }";
String json2Str = "{\n" +
" \"array1\": [\n" +
" {\n" +
" \"id\": \"1\",\n" +
" \"Name\": \"Xytrex Co.\",\n" +
" \"Description\": \"Industrial Cleaning Supply Company\",\n" +
" \"Account Number\": \"ABC15797531\",\n" +
" \"Address\": {\n" +
" \"Permanent\": {\n" +
" \"Street\": \"st.road\",\n" +
" \"pin\": \"789723\"\n" +
" },\n" +
" \"Temporary\": {\n" +
" \"Street\": \"st.road\",\n" +
" \"pin\": \"789723\"\n" +
" }\n" +
" }\n" +
" },\n" +
"\n" +
" {\n" +
" \"id\": \"2\",\n" +
" \"Name\": \"Xytrex Co.\",\n" +
" \"Description\": \"Industrial Cleaning Supply Company\",\n" +
" \"Account Number\": \"ABC15797531\",\n" +
" \"Address\": {\n" +
" \"Permanent\": {\n" +
" \"Street\": \"st.road\",\n" +
" \"pin\": \"789723\"\n" +
" },\n" +
" \"Temporary\": {\n" +
" \"Street\": \"st.road\",\n" +
" \"pin\": \"789723\"\n" +
" }\n" +
" }\n" +
" }\n" +
" ]\n" +
" }";
JSONAssert.assertEquals(json1Str, json2Str, true);
}
}
如果您只是想知道它们之间的差异,请使用如下代码(我将
array2
更改为array1
以比较它们的内容)
pom文件如下所示
public class GsonClient {
public static void main(String[] args) throws Exception {
GsonClient cmp = new GsonClient();
cmp.myTest();
}
private void myTest() throws FileNotFoundException, JSONException {
String json1Str = "{\n" +
" \"array1\": [\n" +
" {\n" +
" \"id\": \"1\",\n" +
" \"Name\": \"Xytrex Co.\",\n" +
" \"Description\": \"Industrial Cleaning Supply Company\",\n" +
" \"Account Number\": \"ABC15797531\",\n" +
" \"Address\": {\n" +
" \"Permanent\": {\n" +
" \"Street\": \"st.road\",\n" +
" \"pin\": \"789723\"\n" +
" },\n" +
" \"Temporary\": {\n" +
" \"Street\": \"st.road\",\n" +
" \"pin\": \"789723\"\n" +
" }\n" +
" }\n" +
" },\n" +
"\n" +
"{\n" +
" \"id\": \"2\",\n" +
" \"Name\": \"Xytrex Co.\",\n" +
" \"Description\": \"Industrial Cleaning Supply Company\",\n" +
" \"Account Number\": \"ABC15797531\",\n" +
" \"Address\": {\n" +
" \"Permanent\": {\n" +
" \"Street\": \"st.road\",\n" +
" \"pin\": \"789723\"\n" +
" },\n" +
" \"Temporary\": {\n" +
" \"pin\": \"789723\"\n" +
" }\n" +
" }\n" +
"}\n" +
" ]\n" +
" }";
String json2Str = "{\n" +
" \"array1\": [\n" +
" {\n" +
" \"id\": \"1\",\n" +
" \"Name\": \"Xytrex Co.\",\n" +
" \"Description\": \"Industrial Cleaning Supply Company\",\n" +
" \"Account Number\": \"ABC15797531\",\n" +
" \"Address\": {\n" +
" \"Permanent\": {\n" +
" \"Street\": \"st.road\",\n" +
" \"pin\": \"789723\"\n" +
" },\n" +
" \"Temporary\": {\n" +
" \"Street\": \"st.road\",\n" +
" \"pin\": \"789723\"\n" +
" }\n" +
" }\n" +
" },\n" +
"\n" +
" {\n" +
" \"id\": \"2\",\n" +
" \"Name\": \"Xytrex Co.\",\n" +
" \"Description\": \"Industrial Cleaning Supply Company\",\n" +
" \"Account Number\": \"ABC15797531\",\n" +
" \"Address\": {\n" +
" \"Permanent\": {\n" +
" \"Street\": \"st.road\",\n" +
" \"pin\": \"789723\"\n" +
" },\n" +
" \"Temporary\": {\n" +
" \"Street\": \"st.road\",\n" +
" \"pin\": \"789723\"\n" +
" }\n" +
" }\n" +
" }\n" +
" ]\n" +
" }";
JSONAssert.assertEquals(json1Str, json2Str, true);
}
}
您确定要从正确的包导入类吗?也许作为“com.google.gson.JsonArray”的导入应该类似于“org.json.something.JsonArray”@Stéphaneamar
org.json.JsonArray
也是一个类,可以在json Simple
中找到。您确定从正确的包导入了类吗?也许作为“com.google.gson.JsonArray”的导入应该像“org.json.something.JsonArray”@StéphaneAmmarorg.json.JsonArray
也是一个类,它在json Simple
中可用,不是硬编码值,这是我必须给这两个文件的名称。这不是硬编码值,这些是我必须给这两个文件起的名字。
Exception in thread "main" java.lang.AssertionError: array1[1].Address.Temporary
Unexpected: Street
at org.skyscreamer.jsonassert.JSONAssert.assertEquals(JSONAssert.java:417)
at org.skyscreamer.jsonassert.JSONAssert.assertEquals(JSONAssert.java:394)
at org.skyscreamer.jsonassert.JSONAssert.assertEquals(JSONAssert.java:336)
at com.henryxi.gson.GsonClient.myTest(GsonClient.java:89)
at com.henryxi.gson.GsonClient.main(GsonClient.java:12)