我正在尝试将JSON文件读入数据结构,以便我可以计算一堆元素。
JSON文件的格式为[{String, String, [], String } ... ]
。现在在这个对象数组中,我需要找到第一个字符串字段(比如说关联)与数组字段(成员名称)之间的关系。我需要弄清楚每个成员属于多少个关联。
我目前正在使用json-simple,这就是我做到的。
Object obj = parser.parse(new FileReader("c://Users/James McNulty/Documents/School/CMPT 470/Ex 4/exer4-courses.json"));
JSONArray jsonArray = (JSONArray) obj;
ArrayList<JSONObject> courseInfo = new ArrayList<JSONObject>();
Iterator<JSONObject> jsonIterator = jsonArray.iterator();
while (jsonIterator.hasNext()) {
courseInfo.add(jsonIterator.next());
count++;
//System.out.println(jsonIterator.next());
}
//System.out.println(count);
String course = "";
String student = "";
ArrayList<JSONArray> studentsPerCourse = new ArrayList<JSONArray>();
for (int i=0; i<count; i++) {
course = (String) courseInfo.get(i).get("course");
studentsPerCourse.add((JSONArray) courseInfo.get(i).get("students"));
System.out.println(course);
System.out.println(studentsPerCourse.get(i));
}
ArrayList<String> students = new ArrayList<String>();
for (int i=0; i<count; i++) {
for (int j=0; j< (studentsPerCourse.get(i).size()); j++) {
students.add((String) studentsPerCourse.get(i).get(j));
//System.out.println(studentsPerCourse.get(i).get(j));
}
//System.out.println(student);
}
JSONObject object = new JSONObject();
Map<String, Integer> studentCourses = new HashMap<String, Integer>();
Set<String> unique = new HashSet<String>(students);
for (String key : unique) {
studentCourses.put(key, Collections.frequency(students, key));
object.put(key, Collections.frequency(students, key));
//System.out.println(key + ": " + Collections.frequency(students, key));
}
FileWriter file = new FileWriter("c://Users/James McNulty/Documents/School/CMPT 470/Ex 4/output.json");
file.write(object.toJSONString());
file.flush();
file.close();
System.out.print(object);
想知道simple-json本身是否有更简单的方法,或者是否有更好的其他库。
答案 0 :(得分:3)
Google gson非常简单,可用于编码和解码。
最简单的方法是通过简单地让引擎使用反射填充字段来填充对象,将它们映射到文件内容described here:反序列化只是对gson.fromJson(json, MyClass.class);
的调用一次你创建了你的课程。
答案 1 :(得分:1)
好像你正试图做他们所谓的Java集合。首先,我会看看你的json模型。构建一个包含上面列出的属性的类。然后代码看起来像这样。
public void parseJson(){
// Read your data into memory via String builder or however you choose.
List<modelthatyoubuilt> myList = new ArrayList<modelthatyoubuilt>();
JSONArray myAwarry = new JSONArray(dataString);
for(int i = 0; i < myAwarry.size(); i++){
JSONObject j = myAwarry.get(i);
modelthatyoubuilt temp = new modelthatyoubuilt();
temp.setProperty(j.getString("propertyname");
//do that for the rest of the properties
myList.add(temp);
}
public int countObjects(ArrayList<modelthatyoubuilt> s){
return s.size();
}
希望这有帮助。
答案 2 :(得分:0)
public class AccessData {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String USER_AGENT = "Mozilla/5.0";
try {
String url = "https://webapp2017sql.azurewebsites.net/api/customer";
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
//add reuqest header
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
con.setRequestProperty("Content-Type", "application/json");
// Send post request
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes("{\"Id\":1,\"Name\":\"Kamlesh\"} ");
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + urlParameters);
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
//print result
System.out.println(response.toString());
}catch (Exception ex) {
System.out.print(ex.getMessage());
//handle exception here
} finally {
//Deprecated
//httpClient.getConnectionManager().shutdown();
}
}
}
答案 3 :(得分:0)
public class JSONWrite
{
public static void main(String[] args)
{
// JSONObject class creates a json object
JSONObject obj= new JSONObject();
// provides a put function to insert the details into json object
obj.put("name", "Dinesh");
obj.put("phone", "0123456789");
obj.put("Address", "BAngalore");
// This is a JSON Array List where we Creates an array
JSONArray Arr = new JSONArray();
// Add the values in newly created empty array
Arr.add("JSON Array List 1");
Arr.add("JSON Array List 2");
Arr.add("JSON Array List 3");
// adding the array with elements to our JSON Object
obj.put("Remark", Arr);
try{
// File Writer creates a file in write mode at the given location
FileWriter file = new FileWriter(IAutoconstant.JSONLPATH);
// Here we convert the obj data to string and put/write it inside the json file
file.write(obj.toJSONString());
file.flush();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
//使用JsonParser将JSON字符串转换为Json Object
JSONParser parser= new JSONParser();
//解析我们之前创建的文件内的JSON字符串
Object obj=parser.parse(new FileReader(IAutoconstant.JSONLPATH));
// Json字符串已转换为JSONObject
JSONObject jsonObject =(JSONObject)obj;
///通过键显示JSON对象的值
String value1 = (String) jsonObject.get("name");
System.out.println("value1 is "+value1);
//将JSONObject转换为JSONArray,因为备注是一个数组。
JSONArray arrayobject=(JSONArray) jsonObject.get("Remark");
//迭代器用于访问列表中的每个元素
Iterator<String> it = arrayobject.iterator();
只要数组中有元素,//循环就会继续。
while(it.hasNext())
{
System.out.println(it.next());
}
}
希望它有助于理解json read.write的概念