CC++实现WebService服务提供JSON数据的接口

CC++实现WebService服务提供JSON数据的接口,第1张

1、C++可以实现webservice,这是毋庸置疑的.axis2本质是运行在tomcat下的一个servlet,分java版本,和C语言版本.官方网站为:http://axis.apache.org/,首页上写着:

The well known Apache Axis, and the the second generation of it, the Apache Axis2, are two Web Service containers that helps users to create, deploy, and run Web Services.Axis2 is avaialble in both Java as well as C, languages and details about each version can be found below. 大概意思就是这东西分java版本和C版本,可以方便用户创建,部署,运行web service.而C++完全是兼容C的.

2、需要服务器,要实现某个服务吧,至于怎样为其他平台服务,主要是监听端口实现解析http协议.js不需要拼串成XML,服务器才要拼串,JS是运行在客户端的,客户端也不是通过SOAP与服务端进行通讯的,而是根据需要调用的服务的WSDL,提供对应参数,客户端与服务端的通讯是用http协议的,而通讯方式根据是GET还是POST把相关参数放到HTTP头或者体中.而web service之间的通讯才可能用得到SOAP.

3、PHP调用web service是非常简单的,貌似有个函数通过SOAP调用.C++编写的web service肯定有WSDL,可以根据WSDL描述的端口参数,来调用.

JSON比URL编码靠谱,但是在解决安全性的问题上,URL编码和JSON没有本质上的区别。最正确的解决方法是用HTTPS。如果条件不允许,偷懒的方法就是拿一个约定好密钥和加密方法在客户端加密,在服务器端解密。这种方法防君子不防小人,因为加密过程可以通过反汇编重现。

导语:JSON作为数据包格式传输的时候具有更高的效率,这是因为JSON不像XML那样需要有严格的闭合标签,这就让有效数据量与总数据包比大大提升,从而减少同等数据流量的情况下,网络的传输压力。JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是JavaScript很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。

怎么生成和解析iOS开发JSON格式数据?

一、如何生成JSON格式的'数据?

1、利用字典NSDictionary转换为键/值格式的数据。

// 如果数组或者字典中存储了 NSString, NSNumber, NSArray, NSDictionary, or NSNull 之外的其他对象,就不能直接保存成文件了.也不能序列化成 JSON 数据.

NSDictionary *dict = @{@"name" : @"me", @"do" : @"something", @"with" : @"her", @"address" : @"home"}

// 1.判断当前对象是否能够转换成JSON数据.

// YES if obj can be converted to JSON data, otherwise NO

BOOL isYes = [NSJSONSerialization isValidJSONObject:dict]

if (isYes) {

NSLog(@"可以转换")

/* JSON data for obj, or nil if an internal error occurs. The resulting data is a encoded in UTF-8.

*/

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL]

/*

Writes the bytes in the receiver to the file specified by a given path.

YES if the operation succeeds, otherwise NO

*/

// 将JSON数据写成文件

// 文件添加后缀名: 告诉别人当前文件的类型.

// 注意: AFN是通过文件类型来确定数据类型的!如果不添加类型,有可能识别不了! 自己最好添加文件类型.

[jsonData writeToFile:@"/Users/SunnyBoy/Sites/JSON_XML/dict.json" atomically:YES]

NSLog(@"%@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding])

} else {

NSLog(@"JSON数据生成失败,请检查数据格式")

}

2、通过JSON序列化可以转换数组,但转换结果不是标准化的JSON格式。

NSArray *array = @[@"qn", @18, @"ya", @"wj"]

BOOL isYes = [NSJSONSerialization isValidJSONObject:array]

if (isYes) {

NSLog(@"可以转换")

NSData *data = [NSJSONSerialization dataWithJSONObject:array options:0 error:NULL]

[data writeToFile:@"/Users/SunnyBoy/Sites/JSON_XML/base" atomically:YES]

} else {

NSLog(@"JSON数据生成失败,请检查数据格式")

}

二、如何解析JSON格式的数据?

1、使用TouchJSon解析方法:(需导入包:#import "TouchJson/JSON/CJSONDeserializer.h")

//使用TouchJson来解析北京的天气

//获取API接口

NSURL *url = [NSURL URLWithString:@"http://m.weather.com.cn/data/101010100.html"]

//定义一个NSError对象,用于捕获错误信息

NSError *error

NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]

NSLog(@"jsonString--->%@",jsonString)

//将解析得到的内容存放字典中,编码格式为UTF8,防止取值的时候发生乱码

NSDictionary *rootDic = [[CJSONDeserializer deserializer] deserialize:[jsonString dataUsingEncoding:NSUTF8StringEncoding] error:&error]

//因为返回的Json文件有两层,去第二层内容放到字典中去

NSDictionary *weatherInfo = [rootDic objectForKey:@"weatherinfo"]

NSLog(@"weatherInfo--->%@",weatherInfo)

//取值打印

NSLog(@"%@",[NSString stringWithFormat:@"今天是 %@ %@ %@ 的天气状况是:%@ %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]])

2、使用SBJson解析方法:(需导入包:#import "SBJson/SBJson.h")

//使用SBJson解析北京的天气

NSURL *url = [NSURL URLWithString:@"http://www.weather.com.cn/adat/sk/101010100.html"]

NSError *error = nil

NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]

SBJsonParser *parser = [[SBJsonParser alloc] init]

NSDictionary *rootDic = [parser objectWithString:jsonString error:&error]

NSDictionary *weatherInfo = [rootDic objectForKey:@"weatherinfo"]

NSLog(@"%@", [NSString stringWithFormat:@"今天是 %@ %@ %@ 的天气状况是:%@ %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]])

3、使用IOS5自带解析类NSJSONSerialization方法解析:(无需导入包,IOS5支持,低版本IOS不支持)

// 从中国天气预报网请求数据

NSURL *url = [ NSURL URLWithString:@"http://www.weather.com.cn/adat/sk/101010100.html"]

// 创建请求

NSURLRequest *request = [NSURLRequest requestWithURL:url]

[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

// 在网络完成的 Block 回调中,要增加错误机制.

// 失败机制处理: 错误的状态码!

// 最简单的错误处理机制:

if (data &&!error) {

// JSON格式转换成字典,IOS5中自带解析类NSJSONSerialization从response中解析出数据放到字典中

id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]

NSDictionary *dict = obj[@"weatherinfo"]

NSLog(@"%@---%@", dict, dict[@"city"])

}

}] resume]

4、使用JSONKit的解析方法:(需导入包:#import "JSONKit/JSONKit.h")

//如果json是“单层”的,即value都是字符串、数字,可以使用objectFromJSONString

NSString *json1 = @"{\"a\":123, \"b\":\"abc\"}"

NSLog(@"json1:%@",json1)

NSDictionary *data1 = [json1 objectFromJSONString]

NSLog(@"json1.a:%@",[data1 objectForKey:@"a"])

NSLog(@"json1.b:%@",[data1 objectForKey:@"b"])

//如果json有嵌套,即value里有array、object,如果再使用objectFromJSONString,程序可能会报错(测试结果表明:使用由网络或得到的php/json_encode生成的json时会报错,但使用NSString定义的json字符串时,解析成功),最好使用objectFromJSONStringWithParseOptions:

NSString *json2 = @"{\"a\":123, \"b\":\"abc\", \"c\":[456, \"hello\"], \"d\":{\"name\":\"张三\", \"age\":\"32\"}}"

NSLog(@"json2:%@", json2)

NSDictionary *data2 = [json2 objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode]

NSLog(@"json2.c:%@", [data2 objectForKey:@"c"])

NSLog(@"json2.d:%@", [data2 objectForKey:@"d"])


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/330175.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存