|
- //input是输入json
- const nx_json *root = nx_json_get(nx_json_parse_utf8((char*)input), "HeWeather5")->children.first; //HeWeather5
- if (! root) {
- printf("parse json failed,root\n");
- return 0;
- }
- if(0!=strcmp("ok", nx_json_get(root, "status")->text_value)){// HeWeather5.status;
- printf("json status ! OK\n");
- return 0;
- }
- const nx_json *city, *basic, *now, *suggestion, *forecast, *tmp;
-
- city=nx_json_get(root->children.first, "city");//HeWeather5.aqi.city aqi->children.first;
- printf("指数=%s ", nx_json_get(city, "aqi")->text_value);//aqi,空气质量指数
- printf("%s,", nx_json_get(city, "qlty")->text_value);//qlty
- printf("co=%s,", nx_json_get(city, "co")->text_value); //co
- printf("no2=%s,", nx_json_get(city, "no2")->text_value); //no2
- printf("o3=%s,", nx_json_get(city, "o3")->text_value); //o3
- printf("pm10=%s,", nx_json_get(city, "pm10")->text_value);//pm10
- printf("pm25=%s,", nx_json_get(city, "pm25")->text_value);//pm25
- printf("so2=%s\n", nx_json_get(city, "so2")->text_value); //so2
- // printf("%s-%s\n", city->children.first->key, city->children.first->text_value); //aqi:"36"
- // printf("%s-%s\n", city->children.first->next->key, city->children.first->next->text_value);//co:"0.8"
-
- basic=nx_json_get(root, "basic");
- printf("更新:%s", nx_json_get(nx_json_get(basic, "update"), "loc")->text_value);//update
- printf("@%s,%s,", nx_json_get(basic, "lat")->text_value, nx_json_get(basic, "lon")->text_value);//lat,lon
- printf("%s,%s\n", nx_json_get(basic, "city")->text_value, nx_json_get(basic, "cnty")->text_value);//cnty
-
- now=nx_json_get(root, "now");
- printf("即时: %s ", nx_json_get(nx_json_get(now, "cond"), "txt")->text_value);//cond
- printf("%s℃,", nx_json_get(now, "tmp")->text_value);//tmp
- printf("%s%%,", nx_json_get(now, "hum")->text_value);//hum
- printf("%spa,", nx_json_get(now, "pres")->text_value);//pres
- tmp=nx_json_get(now, "wind");
- printf("wind:deg=%s/%s sc=%s %sm/s,",
- nx_json_get(tmp, "deg")->text_value,
- nx_json_get(tmp, "dir")->text_value,
- nx_json_get(tmp, "sc")->text_value,
- nx_json_get(tmp, "spd")->text_value);//wind
- printf("vis=%s,", nx_json_get(now, "vis")->text_value);//vis
- printf("pcpn=%s,", nx_json_get(now, "pcpn")->text_value);//pcpn
- printf("dew=%s,", nx_json_get(now, "dew")->text_value);//dew
- printf("fl=%s\n", nx_json_get(now, "fl")->text_value);//fl
-
- suggestion=nx_json_get(root, "suggestion");//生活指引
- printf("空气=%s\n", nx_json_get(nx_json_get(suggestion, "air"), "brf")->text_value);//air
- printf("身感=%s\n", nx_json_get(nx_json_get(suggestion, "comf"), "brf")->text_value);//comf
- printf("穿着=%s,%s\n", nx_json_get(nx_json_get(suggestion, "drsg"), "brf")->text_value, nx_json_get(nx_json_get(suggestion, "drsg"), "txt")->text_value);//drsg
- printf("运动=%s\n", nx_json_get(nx_json_get(suggestion, "sport"), "brf")->text_value);//sport
- printf("出行=%s\n", nx_json_get(nx_json_get(suggestion, "trav"), "brf")->text_value);//trav
- printf("紫外=%s\n", nx_json_get(nx_json_get(suggestion, "uv"), "brf")->text_value);//uv
-
- forecast=nx_json_get(root, "daily_forecast")->children.first; //预报,一般有3天的预报
- for(; forecast; forecast=forecast->next) {
- printf("%s ", nx_json_get(forecast, "date")->text_value);//date
- printf("%s|l%s ", nx_json_get(nx_json_get(forecast, "cond"), "txt_d")->text_value, nx_json_get(nx_json_get(forecast, "cond"), "txt_n")->text_value);//cond
- // printf("cloud=%s,", nx_json_get(forecast, "cloud")->text_value);//sr
- tmp=nx_json_get(forecast, "tmp");
- printf("%s-%s℃,", nx_json_get(tmp, "min")->text_value, nx_json_get(tmp, "max")->text_value);//tmp
- printf("%s%%,", nx_json_get(forecast, "hum")->text_value);//hum
- printf("%spa,", nx_json_get(forecast, "pres")->text_value);//pres
- tmp=nx_json_get(forecast, "wind");
- printf("wind:dir=%s/%s sc=%s %sm/s,", nx_json_get(tmp, "deg")->text_value, nx_json_get(tmp, "dir")->text_value, nx_json_get(tmp, "sc")->text_value, nx_json_get(tmp, "spd")->text_value);//wind
- printf("vis=%s,", nx_json_get(forecast, "vis")->text_value);//vis
- printf("pcpn=%s/", nx_json_get(forecast, "pcpn")->text_value);//pcpn
- printf("%s%%,", nx_json_get(forecast, "pop")->text_value);//pop
- printf("uv=%s,", nx_json_get(forecast, "uv")->text_value);//uv
- tmp=nx_json_get(forecast, "astro");
- printf("s=%s-%s,", nx_json_get(tmp, "sr")->text_value, nx_json_get(tmp, "ss")->text_value);//sr
- printf("m=%s-%s", nx_json_get(tmp, "mr")->text_value, nx_json_get(tmp, "ms")->text_value);//mr
- printf("\n");
- }
- nx_json_free(root);
- nx_json_free(city);
- nx_json_free(basic);
- nx_json_free(now);
- nx_json_free(suggestion);
- nx_json_free(forecast);
- nx_json_free(tmp);
复制代码 有一定注释,放到notepad++那样的编辑器,会比较容易查看。几乎是全解析了,取所需要的field显示就是了。
最近气温偏低,于是就想经常看看天气。手机的天气也可以,但参数不够多。
选择缘由:nxjson 来源github上(多刷新几次,能取到),是轻量级,直接引用源文件,不必编译成库文件。可以逐个枚举,也可以按名称选取,比较方便。通用、方便移植(对单片机有些困难,但对一般的arm/arduino级别的,应该不吃力)。
clone下来后附带有测试案例、有编译说明,等,比较详细。
作者说明:
Very small JSON parser written in C.
## Features
- Parses JSON from null-terminated string
- Easy to use tree traversal API
- Allows // line and /\* block \*/ comments (except before colon ':')
- Operates on single-byte or multi-byte characters (like UTF-8), but not on wide characters
- Unescapes string values (including Unicode codepoints & surrogates)
- Can use custom Unicode encoder, UTF-8 encoder built in
- Can use custom memory allocator
- Can use custom macro to print errors
- Test suite included
## Limitations
- Non-validating parser; might accept invalid JSON (eg., extra or missing commas, comments, octal or hex numeric values, etc.)
在ubuntu上测试结果
谨作例子指引,谢谢观看。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|