为什么JSONObject.get(" name")返回null?

时间:2016-04-25 17:07:37

标签: java json

我正在尝试访问我的一个JSONObject中的元素。我在用 JSON-简单1.1.1.jar。我可以访问第一个"课程"就像你在代码中看到的那样。问题是,我无法访问" CourseNo"等元素。或" SubjectName"。

我的JSON数据是:

[
    {
        Course: {
            SubjectName: "ACCT",
            CourseNo: "201",
            SectionNo: "A",
            Instructors: [
                {
                    Name: "AYLÄ°N SUNA",
                    Surname: "ÖZKAYA",
                    IsPrimary: true
}
],
Schedule: [
{
StartDate: "/Date(1347829200000)/",
FinishDate: "/Date(1356645600000)/",
MeetingTime: [
{  
     .... and it goes like that.

这只是课程数组的第一个元素(course [0])。我可以达到它但不是像CourseNo那样的元素。

这是我的简单代码:

public class CourseQuerySystem {
    public static void main(String[] args) throws FileNotFoundException{
        FileReader reader = new FileReader("CoursesOffered.json");
        JSONArray courseData = (JSONArray)JSONValue.parse(reader);
        JSONObject firstCourse = (JSONObject)courseData.get(0);  // first course
        System.out.println(firstCourse); // it works 

        String courseNo = (String) firstCourse.get("CourseNo");
        System.out.println(courseNo); // returns NULL

        boolean contains = firstCourse.containsKey("CourseNo");
        System.out.println(contains);  // returns false

    }
}

所以,通常字符串courseNo应该等于" 201"但它返回null。 并且boolean contains应该是true,但它不是。

我的输出:

{"Course":{"Instructors":[{"IsPrimary":true,"Surname":"ÖZKAYA","Name":"AYLİN
SUNA"}],"SubjectName":"ACCT","Schedule": .... (it goes.. this is true)
null 
false

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您只需要在JSON中的get()对象上调用Course即可。仔细看看你的JSON,你就会明白我的意思。

public class CourseQuerySystem {
    public static void main(String[] args) throws FileNotFoundException{
        FileReader reader = new FileReader("CoursesOffered.json");
        JSONArray courseData = (JSONArray)JSONValue.parse(reader);
        JSONObject firstCourse = (JSONObject)courseData.get(0);  // first course
        System.out.println(firstCourse); // it works 

        String courseNo = (String) firstCourse.get.get("Course").get("CourseNo");
        System.out.println(courseNo); // Should work
    }
}

请注意,在这些类型的场景中,充分利用调试器可以帮助您找出问题。

答案 1 :(得分:0)

您需要通过JSONObject密钥访问额外的Course,然后才能访问CourseNo