获取json数组里的数据 获取json数组里的数据
2025-05-05 20:40 - 立有生活网
怎么用C语言获取JSON中的数据?
}printf("obj_1 : %sn", pSub->valuestring);可以使用sscanf来读取。一个例子:
获取json数组里的数据 获取json数组里的数据
获取json数组里的数据 获取json数组里的数据
获取json数组里的数据 获取json数组里的数据
if(NULL == pSub)
#include
int main(void) {
char str[] = "{“”:10,“bbb”:20}";
int a, b;
printf("a = %d, b = %d
", a, b);
return 0;
}注意:上面和bbb使用的是中文的引号。
1、可以使用sscanf来读取。一个例子:
#include
int main(void) {
char str[] = "{“”:10,“bbb”:20}";
int a, b;
printf("a = %d, b = %d
", a, b);
return 0;
}2、JSON(JaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Ja, JaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
以下简单介绍用CJSON的思路及实现:
1)创建json,从json中获取数据。
#nclude
#include "cJSON.h"
char makeJson()
{cJSON pJsonRoot = NULL;
if(NULL == pJsonRoot)
{//error happend here
return NULL;
}cJSON_AddStringToObject(pJsonRoot, "hello", "hello world");
cJSON_AddNumberToObject(pJsonRoot, "number", 10010);
cJSON pSubJson = NULL;
pSubJson = cJSON_CreateObject();
if(NULL == pSubJson)
{// create object faild, exit
cJSON_Delete(pJsonRoot);
return NULL;
}cJSON_AddStringToObject(pSubJson, "subjsonobj", "a sub json string");
cJSON_AddItemToObject(pJsonRoot, "subobj", pSubJson);
char p = cJSON_Print(pJsonRoot);
// else use :
// char p = cJSON_PrintUnformatted(pJsonRoot);
String endDate = request.getParameter("endDate");if(NULL == p)
{//convert json list to string faild, exit
//because sub json pSubJson han been add to pJsonRoot, so just delete pJsonRoot, if you also delete pSubJson, it will coredump, and error is : double free
cJSON_Delete(pJsonRoot);
return NULL;
cJSON_Delete(pJsonRoot);
return p;
}void parseJson(char pMsg)
{if(NULL == pMsg)
{return;
}cJSON pJson = cJSON_Parse(pMsg);
if(NULL == pJson)
{// parse faild, return
}// get string from json
cJSON pSub = cJSON_GetObjectItem(pJson, "hello");
// get number from json
pSub = cJSON_GetObjectItem(pJson, "number");
{//get number from json faild
}printf("obj_2 : %dn", pSub->valueint);
pSub = cJSON_GetObjectItem(pJson, "bool");
{// get bool from json faild
}printf("obj_3 : %dn", pSub->valueint);
pSub = cJSON_GetObjectItem(pJson, "subobj");
{// get sub object faild
}cJSON pSubSub = cJSON_GetObjectItem(pSub, "subjsonobj");
if(NULL == pSubSub)
{// get object from subject object faild
}printf("sub_obj_1 : %sn", pSubSub->valuestring);
}int main()
if(NULL == p)
{return 0;
}printf("%sn", p);
free(p);//这里不要忘记释放内存,cJSON_Print()函数或者cJSON_PrintUnformatted()产生的内存,使用free(char )进行释放
return 0;
}2)创建json数组和解析json数组
{cJSON root = cJSON_CreateArray();
if(NULL == root)
{printf("create json array faildn");
return NULL;
}int i = 0;
for(i = 0; i < iSize; i++)
{cJSON_AddNumberToObject(root, "hehe", i);
}char out = cJSON_Print(root);
cJSON_Delete(root);
return out;
}//解析刚刚的CJSON数组
{if(NULL == pJson)
{return ;
if((root = cJSON_Parse(pJson)) == NULL)
{return ;
}int iSize = cJSON_GetArraySize(root);
for(int iCnt = 0; iCnt < iSize; iCnt++)
{cJSON pSub = cJSON_GetArrayItem(root, iCnt);
}int iValue = pSub->valueint;
}cJSON_Delete(root);
return;
}
如何使用iOS SDK获取和解析JSON数据
}#pragma mark - tableViewJSON 一般是从网络接口中请求的一段数据吧.首先要向发送一个请求,得到一段JSON,然后解析一下就行了.用到ASIHTTPRequest和SBJSON两个第三方的开源类库. NSURL =
"devName":devName,接下来 看下工程目录吧,其实并没有必要,直接建立一个工程就行
char makeArray(int iSize)工程目录中有个 Notes.json 文件,该文件就是 要解析的json数据了
Ok ,以上准备完毕,就开始编码了,在此之前故事版的内容 就和我上篇博客文章 IOS 解析xml 故事版 是一样配置的,这里就不在啰嗦了 ,首先看下 chonViewController.h文件,代码如下:
//
// chonViewController.h
// TestJson
//
// Copyright (c) 2014年 choni. All rights reserved.
//
#import
@intece chonViewController : UITableViewController
//保存数据列表
@property(nonatomic,strong) NSMutableArray listData;
@end
[objc] view plaincopy在CODE上查看代码片派生到我的代码片
//
// chonViewController.m
// TestJson
//
// Copyright (c) 2014年 choni. All rights reserved.
//
#import "chonViewController.h"
@intece chonViewController ()
@end
@implementation chonViewController
- (void)viewDidLoad
{[super viewDidLoad];
NSString path = [[NSBundle mainBundle]pathForResource:@"Notes" ofType:@"json" ];
NSData jsonData = [[NSData alloc] initWithContentsOfFile:path];
NSError error ;
id jsonObj = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if (!jsonObj || error) {
NSLog(@"JSON解析失败");
}self.listData = [jsonObj objectForKey:@"Record"];
-(NSInteger)numberOfSectionsInTableView:(UITableView )tableView{
return 1;
}-(NSInteger)tableView:(UITableView )tableView numberOfRowsInSection:(NSInteger)section{
return self.listData.count;
}- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath )indexPath{
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
NSMutableDictionary dict = self.listData[indexPath.row];
cell.textLabel.text = [dict objectForKey:@"Content"];
cell.detailTextLabel.text = [dict objectForKey:@"CDate"];
return cell ;
}- (void)didReceiveMemoryWarning
{[super didReceiveMemoryWarning];
}@end
Ok , 现在就可以编译运行的程序了 ,但是有个主意的地方 :
1.因为使用 NSJSONSerialization 实现json解码,要确定你得项目使用IOS 5 SDK 才可以
2. 其他的就没有什么了,介绍下NSJSONSerialization的类方法吧
1)NSJSONReadingMutableContaines ,指定解析返回的是可变的数组或字典 ,这个方法还是比较使用的,因为如果json数据需要改,不用管撒
2)NSJSONReadingMutableLees ,指定叶是可变的字符串
3) NSJSONReadingAllowFragments , 指定可以部署数组或字典
json数组从数据库获取
var obj = eval('(' + json + ')'); 或其他工具把json字符串转换为js对象 ,然后obj.id 这样访问直接后台查询数据库,把结果2,11,3,5,66,33,13,65拼接成这种字符串传到前台,前台把js代码改写一下:
ok了。var obj = {
text: '油 耗',
x: -20 //center
},
subtitle: {
text: 'Oil Wear',
x: -20
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
yAxis: {
text: 'OilWear (L)'
},
plotLines: [{
value: 0,
w"foot":true, // true/false 是否显示tfoot --- 默认falseidth: 1,
color: '#808080'
}]
},
tooltip: {
valueSuffix: 'L'
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle',
borderWidth: 0
},
series: [{
name: '油耗' //这里去掉逗号
//这里不填写data
}]
});
};
//填充数据
obj.series.data=$.makeArray(result); //result是后台传来的字符串:2,11,3,5,66,33,13,65
//渲染图形
$('#container').highcharts(obj);
Jmeter 解析json文件(多条件获取数组中某个的值)
TAR文件 .tar application/x-tar想要获取claimLabors下claimEstimateItemName="前保险杠骨架"且operationType= "03"的partNo。
分析:
1、jmeter中要想获取到claimLabors下claimEstimateItemName="前保险杠骨架"且operationType= "03"的partNo值,必须要解析该json文件。所以需要在beanshell中使用第三方jar包,则先要在idea中新建工程jmeterTool
这里提供两种方法获取partNo的值。
方法getJsonVal得到一个list返回值,pJsonRoot = cJSON_CreateObject();因为是某一个具体的值,所以直接使用substring截取[]内的内容即可。
方法二:通过jsonpath获取partNo所属数组的整个,再通过map获取partNo的值。
方法getJsonNode得到一个list
上述main方法中的测试,是为了方便后续打jar包。
这里解析json,用到json-path包,所以在工程中需要导入该包:
3、将上述工程打成jar包。
打完包后,进入到包所在的路径下,结构如下:
如果不是上述内容,需要修改一下(将工程的META-INF目录下MANIFEST.MF文件中的内容过来即可)。否则cmd测试时会提示:没有主清单..
4、将打的包放到jmeter安装目录的libext文件夹下
5、打开jmeter,在对应脚本的beanshell中引入该包中的JsonUt常见的MIME类型:il类并调用
怎么取出json数组里面每一组的其中一个值?
void parseArra使用jmeter做接口测试时,经常会要获取json文件中数组中某个相同的值。如下述json文件y(char pJson)function ajax(,succ) {
var aj=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP")
aj.open("get", , true)
aj.send();
aj.onreadystatechange = function() {
if(aj.r// get bool from jsoneadyState == 4&&aj.status==200&&succ) {
succ(aj.responseText)
}}
}//上面是一个ajax方法。下面是使用。
ajax(,tion(res){
console.log(res)
})
//是json文件的路径,res是获取到后的结果,结果是一个数组。在控制台你自己去看,该怎么提出来。
$.ajax()方法怎样从里获取json数据
for(var i in models){这次给大家带来$.ajax()方法怎样从里获取json数据,$.ajax()方法从里获取json数据的注意事项有哪些,下面就是实战案例,一起来看一下。
一.什么是json
json是一种取代xml的数据结构,和xml相比,它更小巧但描述能力却很强,网络传输数据使用流量更少,速度更快。
json就是一串字符串,使用下面的符号标注。
{键值对} : json对象
[{},{},{}] :json数组
"" :双引号内是属性或值
: :冒号前为键,后为值(这个值可以是基本数据类型的值,也可以是数组或对象),所以 {"age": 18}
可以理解为是一个包含age为18的json对象,而[{"age": 18},{"age":
20}]就表示包含两个对象的json数组。也可以使用{"age":[18,20]}来简化上面的json数组,这是一个拥有一个age数组的对象。
二.$.ajax()方法中dataType属性的取值
$.ajax()方法中dataType属性要求为String类型的参数,预期返回的数据类型。如果不指定,JQuery将自动根据包mime信息返回responseXML或responseText【在第三部分解释】,并作为回调函数参数传递。可用的类型如下:
xml:返回XML文档,可用JQuery处理。
html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。
script:返回纯文本JaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有t请求都将转为get请求。
json:返回JSON数据。
jsonp:JSONP格式。使用SONP形式调用函数时,例如my?callback=,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。
三.Mime数据类型及response的setContentType()方法
什么是MIME类型?在把输出结果传送到浏览器上的时候,浏览器必须启动适当的应用程序来处理这个输出文档。这可以通过多种类型MIME(多功能网际邮件扩充协议)来完成。在HTTP中,MIME类型被定义在Content-Type header中。
例 如,架设你要传送一个Microsoft
Excel文件到客户端。那么这时的MIME类型就是“application/vnd.ms-excel”。在大多数实际情况中,这个文件然后将传送给
Execl来处理(设我们设定Execl为处理特殊MIME类型的应用程序)。在Ja中,设定MIME类型的方法是通过Response对象的ContentType属性。比如常用:response.setContentType("text/html;charset=UTF-8")进行设置。
最早的HTTP协议中,并没有附加的数据类型信息,所有传送的数据都被客户程序解释为超文本标记语言HTML 文档,而为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。
每个MIME类型由两部分组成,前面是数据的大类别,例如文本text、图象image等,后面定义具体的种类。
超文本标记语言文本 .html,.html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF图形 .gi}cJSON root = NULL;f image/gif
JPEG图形 .ipeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .i video/x-msvideo
客户程序从上接收数据的时候,它只是从接受数据流,并不了解文档的名字,因此必须使用附加信息来告诉客户程序数据的MIME类型。
在发送真正的数据之前,就要先发送标志数据的MIME类型的信息,这个信息使用Content-type关键字进行定义,例如对于HTML文档,将首先发送以下两行MIME标识信息,这个标识并不是真正的数据文件的一部分。
Content-type: text/html
注意,第二行为一个空行,这是必须的,使用这个空行的目的是将MIME信息与真正的数据内容分隔开。
如前面所说,在Ja中,设定MIME类型的方法是通过Response对象的ContentType属性,设置的方法是使用response.setContentType(MIME)语句,response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。
Tomcat的安装目录confweb.xml中就定义了大量MIME类型 ,可以参考。比如可以设置:
response.setContentType("text/html; charset=utf-8"); html
response.setContentType("text/plain; charset=utf-8"); 文本
application/json json数据
这个方法设置发送到客户端的响应的内容类型,此时响应还没有提交。给出的内容类型可以包括字符编码说明,例如:text/html;charset=UTF-8。如果该方法在getWriter()方法被调用之前调用,那么响应的字符编码将仅从给出的内容类型中设置。该方法如果在getWriter()方法被调用之后或者在被提交之后调用,将不会设置响应的字符编码,在使用协议的情况中,该方法设置
Content-type实体报头。
四.使用$.ajax()方法获取json数据的三种方式
dataType参数的配置决定了jquery如何帮助我们自动解析返回的数据,有几种方式可以获取后台返回的json字符串并解析为json对象,下面是Ja为例解释,下面三中方式的结果
1、$.ajax()参数中不设置dataType,后台response也不设置返回类型,则默认会以普通文本处理【response.setContentType("text/html;charset=utf-8");也是作为文本处理】,js中需要手动使用eval()或$.parseJSON()等方法将返回的字符串转换为json对象使用。
//Ja代码:后台获取单个数控的历史表格的数据
public void getHistorySingleData() throws IOException{
HttpServletRequest request = ServletActionContext.getRequest();
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.setContentType("text/html;charset=utf-8");
String devName = request.getParameter("devName");
String startDate= rif(NULL == pSub)equest.getParameter("startDate");
SingleHistoryData[] singleHistoryData = chartServ.getHistorySingleData(devName,startDate, endDate);
System.out.println(singleHistoryData.length);
System.out.println(JSONArray.fromObject(singleHistoryData).toString());//打印:[{"time":"2016-11-11 10:00:00","state":"运行","ball":"锁紧",....},{"time":"2016-11-11 10:00:05","state":"运行","ball":"锁紧",....},{},{}....]查到几条singleHistoryData对象就打印几个对象的信息{"time":"2016-11-11 10:00:05","state":"运行","ball":"锁紧",....}
} /js代码:选择查询某一时间段的数据,点击查询之后进行显示/
$("#search").click(function () {
var data1 = [];
var devName=$("body").attr("id");
var startDate = $("#startDate").val();
var endDate = $("#endDate").val();
$.ajax({
:"/vii/chart/getHistorySingleData",
type:"t",
data:{
"startDate": startDate,
"endDate": endDate
},
success: function (data) {
alert(Object.prototype.toString.call(data)); //--->弹出[object String],说明获取的是String类型的数据
var JsonObjs = eval("(" + data + ")"); //或者:var JsonObjs = $.parseJSON(data);
alert(JsonObjs);//alert(JsonObjs);---->弹出[object Object],[object Object],[object Object][object Object],[object Object],[object Object]??后台传过来几条singleHistoryData对象就打印几个[object Object]
n=JsonObjs.length;
if(n==0){
alert("您选择的时间段无数据,请重新查询");
}for(var i = 0; i < JsonObjs.length; i++){
var name = JsonObjs[i]['time'];//针对每一条数据:JsonObjs[i],或者:JsonObjs[i].time
var state = JsonObjs[i]['state'];
var ball = JsonObjs[i]['ball'];
var xd = JsonObjs[i]['xd'];
var yd = JsonObjs[i]['yd'];
var zd = JsonObjs[i]['zd'];
var xf = JsonObjs[i]['xf'];
var yf = JsonObjs[i]['yf'];
var zf = JsonObjs[i]['zf'];
data1[i] = {name:name,state:state,ball:ball,xd:xd,yd:yd,zd:zd,xf:xf,yf:yf,zf:zf};//个数与下面表头对应起来就可以了,至于叫什么名字并不影响控件的使用
}if(JsonObjs.length != 10){
for(var j=0;j<(10-((JsonObjs.length)%10));j++){ //补全一页的空白行,使表格的长度保持不变
data1[j+JsonObjs.length] = {name:" ",state:"",ball:"",xd:"",yd:"",zd:"",xf:"",yf:"",zf:""};
}}
var userOptions = {
"id":"kingTable", //必须 表格id
"head":["时间","运行状态","球头状态","X向位置/mm","Y向位置/mm","Z向位置/mm","X向承载力/Kg","Y向承载力/Kg","Z向承载力/Kg"], //必须 thead表头
"body":data1, //必须 tbody 后台返回的数据展示
"displayNum": 10, //必须 默认 10 每页显示行数
"groupDataNum":6, //可选 默认 10 组数
sort:false, // 点击表头是否排序 true/false --- 默认false
search:false, // 默认为false 没有搜索
lang:{
gopageButtonSearchText:"搜索"
}}
var cs = new KingTable(null,userOptions);
}});
});
2、$.ajax()参数中设置dataType="json",则jquery会自动将返回的字符串转化为json对象。后台可以设置为:【】response.setContentType("text/html;charset=utf-8");或者response.setContentType("application/json;charset=utf-8");
//Ja代码:后台获取单个数控的历史表格的数据
public void getHistorySingleData() throws IOException{
HttpServletRequest request = ServletActionContext.getRequest();
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.setContentType("text/html;charset=utf-8");
String devName = request.getParameter("devName");
String startDate= request.getParameter("startDate");
SingleHistoryData[] singleHistoryData = chartServ.getHistorySingleData(devName,startDate, endDate);
System.out.println(singleHistoryData.length);
System.out.println(JSONArray.fromObject(singleHistoryData).toString());//打印:[{"time":"2016-11-11 10:00:00","state":"运行","ball":"锁紧",....},{"time":"2016-11-11 10:00:05","state":"运行","ball":"锁紧",....},{},{}....]查到几条singleHistoryData对象就打印几个对象的信息{"time":"2016-11-11 10:00:05","state":"运行","ball":"锁紧",....}
}/js代码:页面首次加载时,显示规定时间段的数据/
var data1 = [];
var devName=$("body").attr("id");
var startDate = $("#startDate").val("2000-01-01 00:00:00");
var endDate = $("#endDate").val("2018-01-01 00:00:00");
$.ajax({
:"/vii/chart/getHistorySingleData",
type:"t",
data:{
"startDate": "2000-01-01 00:00:00",
"endDate": "2018-01-01 00:00:00"
},
data
php提取json数组里面的值怎么提?
response.getWriter().print(JSONArray.fromObject(singleHwrite(hd,str,strlen(str));istoryData).toString());json_decode需要是UTF8编码得,你检查下file_get_content下来得内容是不是gbk得,或者在decode前使用iconv把内容字符转下utf8的,如果还是解析不出来得话,json_get_erroer有这么个函数,可以去获取下解析失败得原因
与之对应的 chonViewController.m文件 代码如下:js如何获取ajax返回的json的数据
"; html += json_to_format_string(obj[name],deep+1); }else{ html += blank_string + name +": "+ obj[name]+"JSONArray json = JSONArray.fromObject(models); //list数据转json
response.getWriter().println(json);//传到前台
//ajax
success: function(data){
var models = eval("("+data+")");
var rows="";
rows =rows + "
"
"
"
"
}$("#show_table").append(rows);//添加到table
PS:这是Servlet的写法
ajax不是有个回调函数么?里面的data参数,就是返回值
js怎样遍历json数组或对象并读取相应的数据?
500看这样一段函数定义的代码就明白了function json_to_format_string(obj,deep){ var html = ""; var blank_string = ""; for (var i = 0; i < deep; i++) { blank_string += " "; }; for(var name in obj){ if (typeof(obj[name])=="object") { html += blank_string + name +": "+ "
// Created by choni on 14-5-16."; }HttpServletResponse response = ServletActionContext.getResponse(); } return html;}
2017年卫生资格考试成绩查询(2017年卫生专业技

大家好我是小篇,2017年卫生资格考试成绩查询,关于2017年卫生专业技术考试很多人还不知道,那么现在让我们一起来看看吧! 2017年卫生资格考试成绩查询(2017年卫生专业技术考试) 2017年卫生资格···
sleep是商标吗_sleepsheep是什么牌子

aisleep是什么 品牌 sleep是商标吗_sleepsheep是什么牌子 sleep是商标吗_sleepsheep是什么牌子 aisleep睡眠博士是专为人打造的真正的天然、绿色的高科技安眠体系品牌。 AiSleep睡眠博士不仅是科学睡眠的代表···
锁定我的幸福_我锁定你了

指纹锁的广告语 幸福是有吃有喝,并和大家分享快乐。 指纹锁的广告语 锁定我的幸福_我锁定你了 锁定我的幸福_我锁定你了 在我们平凡的日常里,大家都看到过许多经典的广告语吧,那么问题来···