js与C++交互及C++解析json
转载:http://blog.csdn.net/aasmfox/article/details/7016236
1.手动点击网页按钮C++后台响应
2.设置自动触发事件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<style type="text/css">
#button1
{
width: 306px;
}
#button2
{
width: 306px;
}
</style>
<script language="javascript" type="text/javascript">
function Test()
{
alert("你调用了Test");
} function GlobalObject()
{
this.Test=function()
{
alert("你调用了GlobalObject.Test");
}
} function OnTest() { alert("自动触发事件"); } var globalObject = new GlobalObject(); // 两秒后模拟点击
setTimeout(function () {
// IE
if (document.all) {
document.getElementById("clickMe").click();//找到对应元素进行点击
}
// 其它浏览器
else {
var e = document.createEvent("MouseEvents");
e.initEvent("click", true, true);
document.getElementById("clickMe").dispatchEvent(e);
}
}, 2000);
</script>
</head>
<body>
测试页面<br />
<br /> <a href="#" id="clickMe" onclick="OnTest();">link</a>
<input id="button1" type="button" value="点击演示在C++中处理按钮的onclick事件" />
<br />
<br />
<input id="button2" type="button" value="点击调用客户端的CppCall函数" onclick="return window.external.CppCall()" />
<br />
<br />
<p id="p1">Hello World!</p>
<br />
<div id="size_info"></div>
</body>
</html>
比较详细的交互教程:
转载:http://blog.csdn.net/charlessimonyi/article/details/18447471
C++ 解析Json——jsoncpp
转载:http://www.cppblog.com/wanghaiguang/archive/2013/12/26/205020.html
转载:http://blog.csdn.net/crazyer2010/article/details/8962449
转载:http://blog.sina.com.cn/s/blog_86fe5b4401019xbt.html
转载:http://93635083.blog.sohu.com/269335462.html
转载:http://blog.csdn.net/chenscmail/article/details/10109739
转载:http://www.cnblogs.com/kex1n/archive/2011/12/02/2272328.html
解析JSon串:转载:https://www.cppfans.org/1445.html
转载:https://www.cnblogs.com/chenyangchun/p/6953132.html(Json::Value isMember成员使用)
VC下使用JSONCPP(json)

Jsoncpp是个跨平台的开源库,下载地址Jsoncpp开源库
3.使用jsoncpp几个例子:
void Myparse1()
{
const char* str = "{\"result\":{\"id\":\"cc1521c7e1084d90bb26c6a0ee965c8c\",\"mLocktime\":0,\"mTouchid\":\"0\",\"modifyTime\":1480753775000},\"status\":\"ok\"}";
Json::Reader reader;
Json::Value root;
if (reader.parse(str, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素
{
std::string str = root["result"]["id"].asString();//得到
std::string str1 = root["status"].asString();//得到ok }
} void Myparse2()
{
const char* str = "[{\"status\":\"ok\"},{\"MLocktime\":0,\"MTouchid\":\"0\",\"id\":\"cc1521c7e1084d90bb26c6a0ee965c8c\",\"modifyTime\":\"2016-12-03 16:29:35\"}]";
Json::Reader reader;
Json::Value root;
if (reader.parse(str, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素
{
int size = root.size();
std::string str = root[size-]["status"].asString();
std::string str1 = root[size-]["id"].asString(); }
} void Myparse3()
{
const char* str = "[{\"age\":24},{\"age\":1},{\"age\":22},{\"age\":24},{\"age\":16}]";
Json::Reader reader;
Json::Value root;
if (reader.parse(str, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素
{
int size = root.size();
int age = root[size-]["age"].asUInt();//得到24 }
} void Myparse4()
{
const char* str = "{\"friendArray\":[{\"age\":24},{\"age\":1},{\"age\":22},{\"age\":24},{\"age\":16}]}";
Json::Reader reader;
Json::Value root;
if (reader.parse(str, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素
{
int size = root["friendArray"].size();
int age = root["friendArray"][size-]["age"].asInt(); }
}
在项目开发中,后台C++使用jsoncpp解析json串,可以采用上面四种方法进行解析,上面的写法是约定好,一定存在相应的key然后拿到value值,因此存在一定的风险,如果传过来的json串某一key丢失,则会导致程序崩溃,为了保证程序的稳定性,在取key对应的value值时,做一个保护。
string strJson = "{\"msg\":\"正常\", \"code\":\"A0000\", \"data1\":1,\"data2\":3.1415927, \"data3\":-4}";
Json::Reader reader;
Json::Value root;
if (reader.parse(strjson, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素
{
int size = root.size();
std::string str = root["msg"].asString();//得到"正常",但msg不存在这样取程序会崩溃
//root对象中有这个key返回true 否则返回false
std::string str2 = root.isMember("msg")?root["msg"].asString():"";
std::cout <<"uid:"<< str2 << std::endl;//msg存在就打印"正常",若msg不存在则打印空
}
js与C++交互及C++解析json的更多相关文章
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 解析JSON
视频地址:https://www.cctalk.com/v/15114923886141 JSON 数据 我颠倒了整个世界,只为摆正你的倒影. 前面的文章中,我们已经完成了项目中常见的问题,比如 路由 ...
- 《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
先看一下我要实现的功能界面: 这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面 ...
- js读取解析JSON类型数据(转)
谢谢博主,转自http://blog.csdn.net/beyond0851/article/details/9285771 一.什么是JSON? JSON(JavaScript Object Not ...
- 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...
- JS解析json数据并将json字符串转化为数组的实现方法
json数据在ajax实现异步交互时起到了很重要的作用,他可以返回请求的数据,然后利用客户端的js进行解析,这一点体现出js的强大,本文介绍JS解析json数据并将json字符串转化为数组的实现方法, ...
- json进阶(一)js读取解析JSON类型数据
js读取解析JSON类型数据 一.什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式,同 ...
- 利用fastjson解析json并通过js&ajax实现页面的无跳转刷新
1.json是一种优秀的数据格式,在移动开发和web开发中经常用到,本例中通过一个小案例讲解如何通过alibaba的开源框架fastjson来解析jason数据格式并通过js实现无跳转刷新 2,新建一 ...
- js中eval详解,用Js的eval解析JSON中的注意点
先来说eval的用法,内容比较简单,熟悉的可以跳过eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句.如果s语句执行结果是一个值,则返回此值,否则返回undefined. 需要 ...
- 《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中
http://blog.csdn.net/mazhaojuan/article/details/8599167 先看一下我要实现的功能界面: 这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转 ...
随机推荐
- (转载)R14也称作子程序连接寄存器
R14也称作子程序连接寄存器(Subroutine Link Register)或连接寄存器LR.当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份. 其他情况下,R14用作通用寄 ...
- 线性表基本维护[ACM]
#include "iostream" #include "string" using namespace std; typedef struct node{ ...
- demo05
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...
- Calculation
定义一个Strategy接口,其中定义一个方法,用于计算 using System; using System.Collections.Generic; using System.Linq; usin ...
- -05 08:57 ARCGIS地统计学计算文件后缀名为.shp文件制作
2011-07-05 08:57 ARCGIS地统计学计算文件后缀名为.shp文件制作 ARCAMP软件要进行地统计计算的文件后格式后缀名必须为.shp的文件,网上介绍的方法复杂难懂,那么制作.shp ...
- ORA-12154的原因
一个很难想到的引起ORA-12154的原因 使用OracleClient.OracleConnection时(我连的是Oracle 9i,其他版本未知),如果你的执行目录太长或者有括号 ...
- Android SDK 安卓失败 提示: “Failed to fetch URL…” 的错误提示
解决方法: 1. 打开Tools 选择 options 将 第一个复选框勾上. (尝试一下,如果还是失败,参考2) 2. 打开本地host 文件, 在最后一行添加 ...
- iOS 学习笔记 十三 (2015.04.15)采用第三方库,实现ios录音转为amr
1.第三方开源库地址 https://github.com/guange2015/ios-amr 2.参考博客地址 http://blog.csdn.net/windsoul85/article/de ...
- How To Set Up Apache Virtual Hosts on CentOS 6
About Virtual Hosts 虚拟主机,用于在一个单一IP地址上,运行多个域.这对那些想在一个VPS上,运行多个网站的人,尤其有用.基于用户访问的不同网站,给访问者显示不同的信息.没有限制能 ...
- 检测内存泄露:Instruments中的Leaks
前言 如果要检测内存泄露,我们会使用Xcode7自带的Instruments中的Leaks工具来检测. 现在的开发环境是ARC,所以很少会出现内存泄漏的情况. 不过我们一定要养好码代码的规范性. 例如 ...