转载:http://zhidao.baidu.com/link?url=LLuWzwMmpfVcQeSGv1CrAfRXpnZaetm9xypqwMW6zxLhhKES-rITAsG0-Ku-bSMAc2nVoSFk1tOJ0biPcQIoHK

转载: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>

js与C++交互demo

比较详细的交互教程:

转载: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开源库

使用JsonCpp的Demo

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的更多相关文章

  1. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 解析JSON

    视频地址:https://www.cctalk.com/v/15114923886141 JSON 数据 我颠倒了整个世界,只为摆正你的倒影. 前面的文章中,我们已经完成了项目中常见的问题,比如 路由 ...

  2. 《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

      先看一下我要实现的功能界面:   这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面 ...

  3. js读取解析JSON类型数据(转)

    谢谢博主,转自http://blog.csdn.net/beyond0851/article/details/9285771 一.什么是JSON? JSON(JavaScript Object Not ...

  4. 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

    摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...

  5. JS解析json数据并将json字符串转化为数组的实现方法

    json数据在ajax实现异步交互时起到了很重要的作用,他可以返回请求的数据,然后利用客户端的js进行解析,这一点体现出js的强大,本文介绍JS解析json数据并将json字符串转化为数组的实现方法, ...

  6. json进阶(一)js读取解析JSON类型数据

    js读取解析JSON类型数据 一.什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式,同 ...

  7. 利用fastjson解析json并通过js&ajax实现页面的无跳转刷新

    1.json是一种优秀的数据格式,在移动开发和web开发中经常用到,本例中通过一个小案例讲解如何通过alibaba的开源框架fastjson来解析jason数据格式并通过js实现无跳转刷新 2,新建一 ...

  8. js中eval详解,用Js的eval解析JSON中的注意点

    先来说eval的用法,内容比较简单,熟悉的可以跳过eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句.如果s语句执行结果是一个值,则返回此值,否则返回undefined. 需要 ...

  9. 《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中

    http://blog.csdn.net/mazhaojuan/article/details/8599167 先看一下我要实现的功能界面: 这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转 ...

随机推荐

  1. 继承 Bean 配置

    继承 Bean 配置 Spring 允许继承 bean 的配置, 被继承的 bean 称为父 bean. 继承这个父 Bean 的 Bean 称为子 Bean子 Bean 从父 Bean 中继承配置, ...

  2. paper 36 :[教程] 基于GridSearch的svm参数寻优

    尊重原创~~~ 转载出处:http://www.matlabsky.com/thread-12411-1-1.html 交叉验证(Cross Validation)方法思想简介http://www.m ...

  3. EBS多OU和多帐套客户化总结

    (一) 多OU总结 . Form多OU实现 ) 创建一个Table,以CUX_AP_CHECK_HEADER_ALL为例 ) 创建Table的两个Synonym(一个不含_ALL,一个以_ALL结尾) ...

  4. [OrangePi] Building the system

    You can try to build Debian/Ubuntu for OrangePI yourself. Clone my GitHub repository. You will need ...

  5. NOIP200504循环

    NOIP200504循环 乐乐是一个聪明而又勤奋好学的孩子.他总喜欢探求事物的规律.一天,他突然对数的正整数次幂产生了兴趣.众所周知,2的正整数次幂最后一位数总是不断的在重复2,4,8,6,2,4,8 ...

  6. DIV怎样能够垂直居中

    这里只说固定宽高的情况: 1.Top:50%; 2.margin-top:-(height/2); 就这样. 不过很好奇有没有v-align之类的属性可以直接实现.

  7. 30个深度学习库:按Python、C++、Java、JavaScript、R等10种语言分类

    30个深度学习库:按Python.C++.Java.JavaScript.R等10种语言分类 包括 Python.C++.Java.JavaScript.R.Haskell等在内的一系列编程语言的深度 ...

  8. Android 常用工具类之SPUtil,可以修改默认sp文件的路径

    参考: 1. 利用Java反射机制改变SharedPreferences存储路径    Singleton1900 2. Android快速开发系列 10个常用工具类 Hongyang import ...

  9. git log用法【转】

    转自:http://www.cnblogs.com/gbyukg/archive/2011/12/12/2285419.html PHP技术交流群 170855791 git log 查看提交记录,参 ...

  10. [转]linux主机644、755、777权限详解

    转自:http://my.oschina.net/qihh/blog/73135 从左至右,第一位数字代表文件所有者的权限,第二位数字代表同组用户的权限,第三位数字代表其他用户的权限. 从左至右,第一 ...