语言:c++,数据库:SQLite,问题:怎么把json格式的数据存进去。
巴扎黑
巴扎黑 2017-04-17 11:41:36
[C++讨论组]

node表是:(ID string,NODE string)

自己的处理:利用jsoncpp,做了一个插入函数

bool ObjManagement::AddJson(string JsonStr)
{
    Json::Reader reader;
    Json::Value json_object;
    reader.parse(JsonStr, json_object, false);
    string jsonID = json_object["ID"].toStyledString();
    cout <<"解析到的jsonID:"<< jsonID << endl;
    string jsonobj = json_object["AVP_LIST"].toStyledString();
    string sqlInsert = "insert into  node values(" + jsonID + ",\"" + jsonobj.c_str() +"\");";
    cout << "拼接成的sqlInsert:" << sqlInsert << endl;
    sqlite3_exec(pdb, sqlInsert.c_str(), 0, 0, &errMsg);
    if (errMsg)
    {
        cout << "ObjManagement: \t sqlInsert:\t" << errMsg << endl;
        return false;
    }
    return true;
}

main函数如下

int main()
{
    DataBaseManagement *dbm = new DataBaseManagement();
    ObjManagement  *omg = new ObjManagement();
    string strjson = "{\"ID\": \"6851950\", \"AVP_LIST\": [{\"ATTRIBUTE\": \"中文名\", \"VALUE\": \"吴映洁\"}]}";
    cout<AddJson(strjson);
    dbm->CloseDb();
    getchar();
}

得到的结果:

问题是:怎么能正确插入上述数据

巴扎黑
巴扎黑

全部回复(3)
高洛峰
  1. SQL里的字符串要用单引号
  2. 你需要escape,也就是说,JSON里如果出现了单引号,你要把它变成两个单引号
template<typename Input, typename Output>
inline void SQL_escape(Input in, Output &out) {
    if(*in=='\'') *out++='\'';
    *out++=*in;
}

template<typename Input, typename Output>
inline void SQL_escape(Input start, Input stop, Output out)
{ for(Input i=start; i!=stop; ++i) SQL_escape(i, out); }

然后你就可以这么用:

    std::string s="A JSON string with single quote(') inside";
    std::string escaped;
    SQL_escape(s.begin(), s.end(), std::back_inserter(escaped));
    std::cout << "INSERT INTO node VALUES('"<< escaped << "')" << std::endl;
阿神

简而言之就是,你的数据里面带有sql结构的字符,拼接之后改变了sql的结构。

不要手动改单引号,我简单翻了一下api,需要用sqlite3_mprintf进行过滤。

PHP中文网

为何不做一下编解码,用base64加密一下,不会出现任何特殊字符

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号