我使用升压创建JSON字符串。 我试图通过HTTP POST这个JSON字符串发送给服务器。
以下是BOOST创建的字符串 :
{"TokenNo":"XYZ123456","CPUID":"XYZ123456","CommandID":"05","IsEncrypted":"0","CommandString":"{\"ADD\":\"97\",\"ESTBCODE\":\"99999999\",\"EID\":\"XY\",\"CID\":\"0154400000\",\"DATE\":\"14042015\",\"TIME\":\"1835\",\"IOMODE\":\"I\",\"REASONCODE\":\"55\",\"LAT\":\"87\",\"LONG\":\"90\"}"}
在HTTP POST成功,但回复是不是我期待:
HTTP 200
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 20 Apr 2015 13:06:58 GMT
Connection: close
{"CmdStatDesc":"Exception on processing command data"}
一个成功的发布的答复将是这个样子:
HTTP 200
//rest of the header
{"CmdStatDesc":"SUCCESS"}
当我在我的服务器端(测试期间)检查该HTTP POST预期的JSON字符串是如下:
{"TokenNo":"XYZ123456","CPUID":"XYZ123456","CommandID":"05","IsEncrypted":"0","CommandString":"[{\"ADD\":\"97\",\"ESTBCODE\":\"99999999\",\"EID\":\"XY\", \"CID\":\"0154400000\",\"DATE\":\"14042015\", \"TIME\":\"1835\",\"IOMODE\":\"I\",\"REASONCODE\":\"55\",\"LAT\":\"87\",\"LONG\":\"90\"}]"}
预期的(上文)字符串包含方括号[]而由BOOST形成的JSON字符串没有。
这究竟是为什么?
为什么通过BOOST创建的JSON字符串是不是在服务器端产生预期的JSON字符串不同?
注意 - 我已经测试视觉工作室(无BOOST)和后的类似的方案是成功的,形成在VS JSON字符串是按照服务器的要求(具有方括号)。 但我这样做是在Linux上,当使用提振字符串是不同的。
以下是我的main.cpp
namespace ALPHA1
{
struct POST3
{
public:
std::string TokenNo;
std::string CPUID;
std::string CommandID;
std::string IsEncrypted;
std::string JSON_Cmnd_String;
};
std::string to_json(POST3 const& o)
{
ptree out;
out.add("TokenNo", o.TokenNo);
out.add("CPUID", o.CPUID);
out.add("CommandID", o.CommandID);
out.add("IsEncrypted", o.IsEncrypted);
out.add("CommandString", o.JSON_Cmnd_String);
std::ostringstream oss;
boost::property_tree::write_json(oss, out, false);
std:: string json;
json = oss.str();
return oss.str();
}
};
int main()
{
ALPHA1::POST3 obj { "XYZ123456", "XYZ123456", "05", "0", object1.dump(object1)};
std::cout <<to_json(obj) << std::endl;
}
而下面是形成JSON字符串另一个文件中的代码:
void sqliteDB::writeJson(std::ostream& os) const {
using namespace boost::property_tree;
ptree pt;
for (auto &entry : AttendanceT_list)
{
pt.add("ADD", entry.Atten_Addr);
pt.add("ESTBCODE", entry.Atten_EstablishmentCode);
pt.add("EID", entry.Atten_EmployeeID);
pt.add("CID", entry.Atten_CardID);
pt.add("DATE", entry.Atten_PunchDate);
pt.add("TIME", entry.Atten_PunchTime);
pt.add("IOMODE", entry.Atten_InOutMode);
pt.add("REASONCODE", entry.Atten_ReasonCode);
pt.add("LAT", entry.Atten_Lat);
pt.add("LONG", entry.Atten_Long);
}
write_json(os, pt, false);
}