数据解析(XML,JSON)

XML文件有多种样式,标准的是把数据存在字节点上,还有的就是把数据直接存储在属性里面

#import"ViewController.h"

@interface ViewController ()<NSXMLParserDelegate>{
    NSMutableArray * listArr;
     NSString      *elementTag;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
    //1----获取工程中的资源
    NSString * path = [[ NSBundle mainBundle] pathForResource:@"student" ofType:@"xml"];
//    NSLog(@"%@",path);
   
    //2----获取资源文件保存数据
    NSData * data = [NSData dataWithContentsOfFile:path];
//    NSLog(@"%@",data);
   
    //3.---指定解析对象
    NSXMLParser * parper = [[NSXMLParser alloc] initWithData:data];
    parper.delegate = self;
    NSLog(@"%@",parper);
   
    //4.-- --开始解析
    [parper parse];
}

//5.----开始解析准备工作---(从头标签开始)
-(void)parserDidStartDocument:(NSXMLParser *)parser{
    //一般在此方法进行数组或字典等对象的初始化
    listArr = [NSMutableArray  array];
}

//6.-----开始解析头标签
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
    //elementName 头标签名。attributeDict代表头标签所在<>中 用=连接的内容
   
    elementTag = elementName;
    if ([elementName isEqualToString:@"User"]) {
       
        NSString * s = [attributeDict objectForKey:@"id"];
        NSMutableDictionary * dict = [NSMutableDictionary dictionary];
        [dict setObject:s forKey:@"id"];
        [listArr addObject:dict];
       
    }
}

//7.------获取标签存储的字符串
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
   
    NSMutableDictionary * dic = [listArr lastObject];
    if ([elementTag isEqualToString:@"name"] || [elementTag isEqualToString:@"age"]) {
        [dic setObject:string forKey:elementTag];
    }
}

//8.-----将elementTag置空
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    //解析头标签结束之后,将elementTag置空,避免尾标签对foundCharacters造成的影响
    elementTag = nil;
}

//9.----准备结束解析工作---(在尾标签结束)-(void)parserDidEndDocument:(NSXMLParser *)parser{

for (NSMutableDictionary * dic in listArr) {

NSLog(@"-->%@,%@,%@",[dic objectForKey:@"id"],dic[@"name"],dic[@"age"]);

}}

===================================================

JSON解析

1.先取出路径

2.获取资源文件保存数据

3.用系统自带库进行解析--(致此解析完成)

4.取出:a.先取出最外层的数组或者字典  , b,然后一次往里面解析数组或者字典  c.  最后对数组或者字典进行遍历

Weather.h

#import <Foundation/Foundation.h>

@interface Weather : NSObject

@property (nonatomic,copy)NSString * raRadarde;
@property (nonatomic,copy)NSString * SD;
@property (nonatomic,copy)NSString * WD;
@property (nonatomic,copy)NSString * WS;
@property (nonatomic,copy)NSString * WSE;
@property (nonatomic,copy)NSString * city;
@property (nonatomic,copy)NSString * cityid;
@property (nonatomic,copy)NSString * isRadar;
@property (nonatomic,copy)NSString * njd;
@property (nonatomic,copy)NSString * qy;
@property (nonatomic,copy)NSString * temp;
@property (nonatomic,copy)NSString * time;

@end

Weather.m

#import "Weather.h"

@implementation Weather

-(NSString *)description{
    return [NSString stringWithFormat:@"%@:%@ ,%@,%@ ,%@,%@,%@:%@ ,%@,%@,%@,%@",_raRadarde,_SD,_WD,_WS,_WSE,_city,_cityid,_isRadar,_njd,_qy,_temp,_time];
}
@end

ViewControl.h

#import "ViewController.h"
#import "Weather.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
   
    NSString * str = @"http://www.weather.com.cn/data/sk/101010100.html";
    NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]];
//    NSLog(@"%@",data);
    id obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
//    NSLog(@"%@",obj);
    NSDictionary *dataDic = [obj objectForKey:@"weatherinfo"];//取出最外层的字典
    NSLog(@"%@",dataDic);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

//网络数据解析分为两种方式(XML,JSON),其中JSON使我们常用的比较简单的解析方式
//JSON--解析步骤:
//1--先取出文件路径
//2--获取资源数据保存
//3--用系统库自带的方式(NSJSONSerialization)进行解析,(致此解析完成)
//--取出解析结果:a.先取出最外层的数组或者字典 ,b.然后依次往里面解析数组或者字典  c.最后对需要的数组或者字典进行遍历

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
    //获取工程中的资源
    NSString * path = [[NSBundle mainBundle] pathForResource:@"json" ofType:@"json"];
    //将资源文件转换为data数据
    NSData * data = [NSData dataWithContentsOfFile:path];

//用系统自带库进行解析(只能对数据进行解析)

id  obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
//    NSLog(@"%@",obj);
    //取出url
    NSArray * arr = [obj objectForKey:@"student"];
    NSLog(@"%@",arr);
   
    for (NSMutableDictionary * dict in arr) {
//        NSLog(@"%@",dict);
        NSString * str = dict[@"name"];
        NSLog(@"%@",str);
        NSString * str1 = dict[@"age"];
        NSLog(@"%@",str1);
        NSString * str2 = dict[@"scroe"];
        NSLog(@"%@",str2);
       
//        NSLog(@"-->%@,%@,%@",dict[@"name"],dict[@"age"],dict[@"scroe"]);

}

}

时间: 2024-08-06 03:40:01

数据解析(XML,JSON)的相关文章

iOS中的数据解析(XML,JSON),SAX解析,DOM解析

第三方 SAT解析 #import "SAXTableViewController.h" #import "Student.h" @interface SAXTableViewController ()<NSXMLParserDelegate> @property (nonatomic, retain) NSMutableArray *dataSourse; // 存储学生对象 @property (nonatomic, retain) Student

第十五讲.数据解析(XML与JSON两种数据解析)

一.XML数据解析 1.SAX:Simple API for XML.基于事件驱动的解析方式,逐行解析数据.(采用协议回调机制) NSXMLParser的解析方法: 1 #import "ViewController.h" 2 #import "Model.h" 3 4 @interface ViewController ()<NSXMLParserDelegate> 5 6 @property(nonatomic,strong)UITableView

Cocos2d-x学习笔记(十三)—— 数据解析(json/xml)

在我们获取网络数据时,基本上使用的都是xml以及json,因此学习对这两种数据进行解析,对我们有很大的帮助. 下面是代码: HelloParse.h: <span style="font-size:18px;">#ifndef __HELLOPARSE_H__ #define __HELLOPARSE_H__ #include "cocos2d.h" using namespace cocos2d; class HelloParse : public c

android中的网络解析xml,json,html框架

android中网络请求回来数据之后,我们要对其解析.请求的返回的结果格式如果不是自定义协议:那么返回的数据通常是xml,json,html形式的数据了. 下面就是针对上面3种格式进行解析. xml解析使用工具:在android中推荐使用pull解析,还有其他的dom,sax解析. json解析使用工具:推荐使用Fastjson,由阿里提供.还有其他的如JackSon,Gson解析. html解析使用工具:推荐使用Jsoup,还有其他的如HtmlParser;关于使用这个,网络上的爬虫就是这样子

AFN 获取数据,数据解析:JSON 介绍

AFN的介绍: 可以自动对服务器返回的数据进行解析,默认将服务器返回的数据当做 JSON 数据解析 是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众多功能于一身的强大的类库. 网络获取数据一直是手机软件的重中之重,如果处理的不好,会造成很差的用户体验.随着ASIHTTPRequest的停止更新,更换网络库是必然的事情,AFNetworking就是很好的替代品.而且都是轻量级,不要担心加入太多库会多软件性能有影响. AFN使用的注意事项:  (1

iOS中解析 XML / JSON

JSON数据格式 1. 概述: JSON (JavaScript Object Notation) 是?一种轻量级的数据交换格式 基于?文本格式,易于?人阅读和编写,同时也易于机器解析和?生成. 2. JSON 数据的书写格式是:名称/值 • 名称写在前?面(在双引号中) • 值对写在后?面 • 中间?用冒号隔开 3. JSON 值?支持类型 数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true 或 false) 数组(在中括号中) 对象(在花括号中) null JSON格式?一:最外层

java 调用wsdl接口同时将返回数据解析成json

package com.haiersoft.ushequmobile.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.util.List; import java.util.Map; imp

将Array格式的数据解析成JSON格式的数据

在编程的过程中,数据的传输格式如何,会影响开发的效率和后期代码的维护, 并且现在许多的js中支持了JSON格式的数据, 比如angular.nodejs.本篇文章主要讲解Array(数组)形式数据的解析.其它格式的数据会在后续的文章中进行书写. (1)定义一个解析Array的类JSONArray. public class JSONArray { @SuppressWarnings("unchecked") public static String toJSONString(List

数据解析2:JSON解析(1)

JSON是网络传输中数据组织的一种格式. 下面为几个不同的JSON数据: 1."{name:'jack',age:23}" 2."{student:{name:'jack',age:23}}" 3."{students:[{name:'jack',age:23},{name:'lily',age:22}]}" 4."{object:{persons:[{name:'呵呵',image:'http://192.168.56.1:8080/

iOS数据解析之JSON解析

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,易于阅读和编写,同时也易于机器解析和生成 JSON文件有两种结构: 1 对象:"名称/值"对的集合,以"{"开始,以"}"结束,名称和值中间用":"隔开 2 数组:值的有序列表,以"["开始,以"]"结束,中间是数据,数据以","分隔 (JSON中