2016-06-11 15 views
1

私は、C++クライアントとPythonサーバーを使ってJeromqを使ってJsonオブジェクトを交換しようとしています。JSONオブジェクトをZmq経由でC++クライアントで送信 - 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:私はjsoncppを使用してい

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' 

をC++のJson

C++とPythonの間でJsonメッセージを交換するにはどうすればよいですか?

答えて

0

json文字列をPythonオブジェクトに2回変換しようとしています。次の行は、文字列ではなくオブジェクトを返します。

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

socket.recv_json()でデータを受信し、それの後に行を削除するか、socket.recv()とデータを受信し、json.loads(json_str)とPythonオブジェクトにjson_strの文字列をロードいずれ。

+0

ありがとうございました、これらのソリューションは機能します! –

+0

に 'socket.recv_json()'のC++メソッドがありますか? –

+0

私はそこにいるとは思わない。このページhttp://api.zeromq.org/2-1:zmq-cppにはapiのわずかに古いバージョンが書かれていますが、jsonに直接対処するためのソケットオブジェクトにはメソッドがないようです。 – user2027202827

関連する問題