mud中map格式转Json形式字符串

前言

最近发现mysql数据库中支持json数据类型,所以在思考怎样把lpmud中的dbase内容以json形式存入数据库

经过各种努力,我把相关的sfun给初步探索出来了

半路出家,如有不合适,多多提点

最到的问题

我认为最大的问题就是lpmud中map的符号是([]),而在其他语言中(如javascript,java等)类似的数据格式是用花括号包围的{};因此,只能把map中的各个key-value对取出来,重新进行字符连接;

代码

string mapToJson(mapping m){
    int i;
    string str = "{";
    mixed key;
    if(!mapp(m)) return "{}";
    //mysql中json不支持空逗号为结尾,会报错,所以只能判断map的大小,如果大于1个,那么最后一个必须考虑逗号问题;
    if(sizeof(m)>1){
    for(i=0;i< (sizeof(keys(m))-1);i++){
        if(intp(m[keys(m)[i]])){
            str += "\\\"" + keys(m)[i] + "\\\":" + m[keys(m)[i]] +","; 
        }else if(mapp(m[keys(m)[i])){//考虑map格式的值
           str +="\\\"" + keys(m)[i]+"\\\":"+ mapToJson(m[keys(m)[i]]) +",";
        }else{
        str +="\\\""+ keys(m)[i] + "\\\":\\\"" + m[keys(m)[i]] +"\\\",";
        }
    }
}
//map中最后一组数据对处理;
    if(intp(m[keys(m)[(sizeof(keys(m))-1)]])){
        str +="\\\""+ keys(m)[(sizeof(keys(m))-1)] + "\\\":" + m[keys(m)[(sizeof(keys(m))-1)]] +"}";
    }else if(mapp(m[keys(m)[(sizeof(keys(m))-1)]])){
        str +="\\\"" + keys(m)[(sizeof(keys(m))-1)]+"\\\":"+ mapToJson(m[keys(m)[(sizeof(keys(m))-1)]])+"}";
     }else{ 
        str +="\\\""+ keys(m)[(sizeof(keys(m))-1)] + "\\\":\\\"" + m[keys(m)[(sizeof(keys(m))-1)]] +"\\\"}";
}

 //   str += "};
    return str;
}

在test.c中(部分代码)

int main(object me, string arg)
{
    // 请在此实现你的代码
    object ob, ob1;
    mixed ret;
    string key,value,str;
    mapping info=([]);
    ob=me;
  //  my=ob->query_entire_dbase();
    my = (["name":"tttina","info":(["hp":100,"mp":44]),"gender":"男"]);
    tmy=ob->query_entire_temp_dbase();
    str ="\""+ mapToJson(my)+"\"";//前后需要加引号
     printf("str %s\n",str);
    info["id"]=random(100)+2;
    info["name"]="tina";
    info["information"] =json_decode(str);
    printf("info %O\n",info["information"]);
    ret = F_DB->table("users")->insert(info); 
  //  string jsonString = "{\"prefix\":\"ZJMUD\",\"msg\":\"helphelp\"}";
  //  mixed json = (["prefix":"ZJMUD","msg":"helphelphellp"]);
  //  write("json Result=" + json_encode(json) +"\n");
 //   printf("Result=%O\n",json_decode(jsonString)); 
printf("ret %O\n",ret);

 if(!ret)write("error");
    return ret;
}

此为返回结果

file

file

京ICP备13031296号-4