2016-06-11 575 views
1

我想通过C++客户端和使用zeromq的python服务器交换Json对象。通过zmq用C++客户端发送JSON对象 - Python服务器

server.py

import zmq 
import json 

context = zmq.Context() 
socket = context.socket(zmq.REP) 
socket.bind("tcp://*:5555") 

while True: 
    json_str = socket.recv_json() 
    data_print = json.loads(json_str) 
    Type = data_print['Type'] 
    Parameter = data_print['Parameter'] 
    Value = data_print['Value'] 
    print(Type,Parameter,Value) 

client.cpp

 #include <zmq.hpp> 
    #include <string> 
    #include <iostream> 
    #include <sstream> 
    #include <json/json.h> 
    #include <typeinfo> 

    class multi_usrp_emulation{ 
    public: 
     void client1(){ 

      std::string strJson="{\"Type\":\"TX\", \ 
            \"Parameter\" : \"Frequency\" ,\ 
            \"Value\" : \"5.17e9\" \ 
           }"; 

      Json::Value root; 
      Json::Reader reader; 
      reader.parse(strJson.c_str(),root); 
      Json::FastWriter fastwriter; 
      std::string message = fastwriter.write(root); 
      zmq::context_t context (1); 
      zmq::socket_t socket (context, ZMQ_REQ); 
      socket.connect ("tcp://localhost:5555"); 
      zmq::message_t request (message.size()); 
      memcpy (request.data(), (message.c_str()), (message.size())); 
      socket.send(request); 
      } 
    }; 
    int main (void) 
    { 

     multi_usrp_emulation caller; 
     caller.client1(); 
    } 

执行这些程序,在server.py此错误accours:

data_print = json.loads(json_str) 
File "/usr/lib/python3.4/json/__init__.py", line 312, in loads 
    s.__class__.__name__)) 
TypeError: the JSON object must be str, not 'dict' 

我使用jsoncpp为JSON在C++中。

如何在C++和Python之间交换Json消息?

回答

0

您试图将json字符串转换为python对象两次。以下两行都返回对象,而不是字符串。

json_str = socket.recv_json() 
data_print = json.loads(json_str) 

要么与socket.recv_json()接收数据和之后删除行,或者与socket.recv()接收的数据,然后在json_str加载字符串转换成Python对象与json.loads(json_str)

+0

谢谢,这些解决方案的工作! –

+0

是否有一个'socket.recv_json()'的C++方法? –

+0

我不相信。这个页面http://api.zeromq.org/2-1:zmq-cpp记录了api的一个稍旧的版本,但是在socket对象上似乎没有任何方法直接处理json。 – user2027202827

相关问题