JSON没有标识符,我如何从中获取信息?

时间:2014-03-05 05:02:18

标签: java android json parsing

所以基本上我试图抓住所有这些课程,把它们放到列表视图中,当你点击每个项目时,它会带你去另一个课程描述较长的活动。如果需要,我们将使用JSON解析和asynctask来执行此操作。我找到了很少的教程,这个课是一个实验课,我之前没有java经验,也不问我为什么这是我们的任务,我的教授是疯狂的。

这是需要解析的JSON,通常我会看到一个像“name”或“number”这样的标识符,或者你可以提取和提取的东西,但由于没有,我只是完全迷失了我应该如何抓住每门课程的课程编号。我们没有书,很少有他给我们的例子,他们也没有真正与此有关。

这是JSON的课程,没有数组名称或标识符,但我应该能够神奇地知道如何分别抓住它们:

http://iam.colum.edu/portfolio/api/course?json=true

然后每个课程都有一个课程编号,所以获取json只是在URL中的“课程”之后添加该课程编号:

http://iam.colum.edu/portfolio/api/course/36-1600?json=True

36-1600是该示例的课程编号。

我真的很想知道如何完成这个的方向感。我不需要答案只是一些指导,因为我对这项任务一直盲目,聋哑,根本无法解决这个问题。

我有4个问题: - 为什么他们的JSON中没有任何标识符? - 如何拆分它们没有标识符? - 当JSON没有数组名称时,如何使用解析JSON填充列表视图 - 你知道我可以遵循哪些教程可以帮助我专门解决这个问题吗?

我急需帮助,提前谢谢你。我几乎不知道从哪里开始。

3 个答案:

答案 0 :(得分:1)

第一个链接包含

[
    "36-1200 Computer Architecture*",
    "36-1300 Digital Image Design",
    "36-1400 Sound for Interaction",
    "36-1501 Introduction to Programming* ",
    "36-1600 Character Visualization for Games",
    "36-1950 Virtual Worlds Concepts",
    "36-2300 Digital Image Experiments",
    "36-2320 Computer Illustration*",
    "36-2350 2D Art for Games ",
    "36-2400 Sound Design for Games I*",
    "36-2550 C++ Programming I",
    "36-2600 Object Oriented Programming",
    "36-2601 Authoring Interactive Media*\t ",
    "36-2606 Interactive Advertising Campaign",
    "36-2609 Sound and Motion*",
    "36-3060 Indie Game Sprint",
    "36-3100 Navigational Interfaces *",
    "36-3110 Advanced Interfaces",
    "36-3270 Xna Game Programming",
    "36-3300 Experimental Imaging*",
    "36-3301 3D Composition for Interactive Media I",
    "36-3350 3D Digital Sculpting",
    "36-3400 Sound Design for Games 2",
    "36-3500 Programming for Games* ",
    "36-3520 Programming Data Design",
    "36-3600 IAM Team  ",
    "36-3620 Introduction to Robotics",
    "36-3710 IAM Programming Topics: Mobile Programming",
    "36-3994 Indie Team Game Project ",
    "36-3997 Large Team Game Project",
    "36-3998 Large Team Game Studio"
]

它是一个JSONArray

ArrayList<String> aa = new ArrayList<String>();
JSONArray jr = new JSONArray("your json string");
for(int i=0;i<jr.length();i++)
{
      String value = (String) jr.get(i);
      aa.add(value);  
}

在ListView中显示

ArrayAdapter<String> adapter = new ArrayAdapter<String>(ActivityName.this,android.R.layout.simple_list_item_1,aa);
ListView lv =(ListView) findViewById(R.id.ListView);
lv.setAdapter(adapter); 

您可以使用正则表达式来拆分“36-1200计算机体系结构”。

第二个链接包含

{ // json object 
    "CourseName": "Character Visualization for Games",
    "CourseNumber": "36-1600",
    "CourseDescription": "This course is on one hand a traditional drawing course, trying to assist students in their knowledge of line, value and perspective when dealing with observational drawing, while on the other hand, it is a course designed to assist in the transition between the analog and the digital world. ",
    "Images": [ // json array images
        "http://iam.colum.edu/images/uploads/course/130135397158529174_EddieEinikis_midterm_digitalv3.jpg",
        "http://iam.colum.edu/images/uploads/course/130135393832313918_QuanVu_Punica.jpg",
        "http://iam.colum.edu/images/uploads/course/130135393555293438_Beryl.jpg",
        "http://iam.colum.edu/images/uploads/course/130028438639598178_SebastianAsturrizaga_Final_Render02.jpg",
        "http://iam.colum.edu/images/uploads/course/130028438588739570_Quintin_UshtakWarlordCharacterSheet.jpg",
        "http://iam.colum.edu/images/uploads/course/130028438464245186_Nimah_Final Temp The Ferryman.jpg",
        "http://iam.colum.edu/images/uploads/course/130028438437567818_Mario.Ramirez_FinalCharacter_03.jpg",
        "http://iam.colum.edu/images/uploads/course/130028438296224570_KAO_03_Lieutenant Cera.jpg",
        "http://iam.colum.edu/images/uploads/course/130028438220092666_JulieWilmore_Final_WithFixes.jpg",
        "http://iam.colum.edu/images/uploads/course/130028438188423042_Joi_Zara_FInal Render_01.jpg"
    ]
}

解析

JSONObject jb = new JSONObject(" your jsonstring");
String coursename = jb.getString("CourseName");
String coursenumber = jb.getString("CourseNumber);
String coursedescription = jb.getString("CourseDescription");

然后解析json数组Image就像你上面的json数组一样。

JSONArray jar = jb.getJSONArray("Images");
...// loop through the array and get the link
...// once you get the links download and display images. 

答案 1 :(得分:0)

第一个资源有一个列表,其中每个元素都是一个字符串,字符串的第一个单词是课程ID。

例如:

JSONArray array = new JSONArray(yourJson);
for (int i = 0; i < array.length(); i++) {
    String courseSpec = array.get(i);
    String courseId = courseSpec.split(' ')[0]
    // and use your ID!
}

String.split reference with examples

这有足够的帮助吗?

答案 2 :(得分:0)

您拥有的第一个JSON字符串是JSON数组。不需要标识符,只需要索引。

迭代每个元素,用它做任何你想做的事。

JSONArray array = new JSONArray(yourJson);
for (int i = 0; i < array.length(); i++) {
    array.get(i); // and do whatever
}

查看JSON数组元素本身,您似乎需要解析它们并拆分它们以检索课程编号。然后,您可以在第二次服务中使用它。