js与C++交互及C++解析json

转载: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几个例子:

 1 void Myparse1()
 2 {
 3     const char* str = "{"result":{"id":"cc1521c7e1084d90bb26c6a0ee965c8c","mLocktime":0,"mTouchid":"0","modifyTime":1480753775000},"status":"ok"}";
 4     Json::Reader reader;  
 5     Json::Value root;  
 6     if (reader.parse(str, root))    // reader将Json字符串解析到root,root将包含Json里所有子元素  
 7     {
 8         std::string str = root["result"]["id"].asString();//得到
 9         std::string str1 = root["status"].asString();//得到ok
10 
11     }
12 }
13 
14 void Myparse2()
15 {
16     const char* str = "[{"status":"ok"},{"MLocktime":0,"MTouchid":"0","id":"cc1521c7e1084d90bb26c6a0ee965c8c","modifyTime":"2016-12-03 16:29:35"}]";
17     Json::Reader reader;  
18     Json::Value root;  
19     if (reader.parse(str, root))    // reader将Json字符串解析到root,root将包含Json里所有子元素  
20     {
21         int size = root.size();
22         std::string str = root[size-2]["status"].asString();
23         std::string str1 = root[size-1]["id"].asString();
24 
25     }
26 }
27 
28 void Myparse3()
29 {
30     const char* str = "[{"age":24},{"age":1},{"age":22},{"age":24},{"age":16}]";
31     Json::Reader reader;  
32     Json::Value root;  
33     if (reader.parse(str, root))    // reader将Json字符串解析到root,root将包含Json里所有子元素  
34     {
35         int size = root.size();
36         int age = root[size-5]["age"].asUInt();//得到24
37 
38     }
39 }
40 
41 void Myparse4()
42 {
43     const char* str = "{"friendArray":[{"age":24},{"age":1},{"age":22},{"age":24},{"age":16}]}";
44     Json::Reader reader;  
45     Json::Value root;  
46     if (reader.parse(str, root))    // reader将Json字符串解析到root,root将包含Json里所有子元素  
47     {
48         int size = root["friendArray"].size();
49         int age = root["friendArray"][size-1]["age"].asInt();
50 
51     }
52 }

 在项目开发中,后台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不存在则打印空
    }
原文地址:https://www.cnblogs.com/chechen/p/5594937.html