解析json列表

时间:2012-08-01 07:49:12

标签: java json parsing

我需要解析存储在单个文件中的json列表!

到目前为止,我所做的是, test.json文件包含:

{"location":"lille","lat":28.4,"long":51.7,"country":"FR"}

使用此文件我有以下代码

    public class JsonReader {
        public static void main(String[] args) throws ParseException {
            JSONParser parser = new JSONParser();
    try {
    Object obj = parser.parse(new FileReader("c:\\test.json"));
    JSONObject locationjson= (JSONObject) obj;
        String location= (String) locationjson.get("location");
        System.out.printf("%s",location);
    long lat = (Long) locationjson.get("lat");
    System.out.printf("\t%d",lat);
//similarly for other objects           

这是一个有效的代码,我只能在test.json文件中打印一个json

现在,如果我必须在file:test1.json中打印json列表,如下所示:每行是一个有效的json,并且在单个文件中有json列表。我需要的是解析每个json并在每行中打印它。使用bean类会起作用吗?

{"Atlas":{"location":"lille","lat":28.4,"long":51.7,"country":"FR"}}
{"Atlas":{"location":"luxum","lat":24.1,"long":54.7,"country":"LU"}}
{"Atlas":{"location":"ghent","lat":28.1,"long":50.1,"country":"BE"}}
{"Atlas":{"location":"alborg","lat":23.4,"long":53.7,"country":"DN"}}

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

JSON应该有一个根节点。

如果您没有,则可以逐行读取文件,并将每一行传递到JSONParser中的StringReader(自JSONParser.parse()以来方法需要Reader)。

e.g。

   BufferedReader in
      = new BufferedReader(new FileReader("test.json"));
   while(!done) {
      String s = in.readLine();
      if (s == null) {
         done = true;
      }
      else {
         StringReader sr = new StringReader(s);
         // etc...
      }
   }

编辑:我假设您正在使用JSONParser。如果您正在使用不同的解析器(哪一个?),则可能采用String参数。

答案 1 :(得分:0)

JSONParser.parse()也将String作为参数。

使用FileReader读取文件,并使用JSONParser.parse(String)方法读取您读取的每一行。

答案 2 :(得分:0)

首先:确保为头文件中具有字符串属性并在实现文件中合成的每一行的子项创建了一个类。然后在实现文件中创建一个属性数组。进行解析。在解析文件中。在检索数据方法中使用NSJSONSerialization:

-(void)retrieveData{

    NSURL * url =[NSURL URLWithString:getDataURL];
    NSData *data =[NSData dataWithContentsOfURL:url];

    json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
    newsArray = [[NSMutableArray alloc]init];

    for (int i = 0; i < json.count; i++){
        {
            NSString * cID =[[json objectAtIndex:i]objectForKey:@"Name1"];
            NSString * cName = [[json objectAtIndex:i]objectForKey:@"name2"];
            NSString * cState =[[json objectAtIndex:i]objectForKey:@"name3"];
            NSString * cPopulation =[[json objectAtIndex:i]objectForKey:@"Edition"];
            NSString * cCountry =[[json objectAtIndex:i]objectForKey:@"name4"];
City *myCity = [[City alloc]initWithCityID:cID andCityName:cName andCityState:cState andCityPopulation:cPopulation andCityCountry:cCountry];
            [newsArray addObject:myCity];
        }
        [self.myTableView reloadData];
    }    
}

然后检索子对象或数组,并在名称1名称2部分输入它们以将它们解析为您的表。还要确保您已经设置了表并为其分配了一个单元格标识符并索引到行。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
     //static NSString *strIdentifier=@"identity";
    static NSString *cellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if(cell == nil){
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
    }
   // cell.textLabel.text = [NSString stringWithFormat:@"Cell %d",indexPath.row];

    City *currentCity =[newsArray objectAtIndex:indexPath.row];
    cell.textLabel.text = currentCity.Name1;
    cell.detailTextLabel.text = currentCity.Name2;

    return cell;

}