TypeError(“事件数据与JSON类型不兼容:{}”。format(e))

时间:2019-07-23 01:27:48

标签: python azure-eventhub azure-eventhub-capture

我正在尝试向事件中心发送和接收json数据。但是我遇到了错误:事件数据在接收数据时与JSON类型不兼容。这是我的发送和接收代码。

#Event_Hub_send.py
import sys
import logging
import datetime
import time
import os

from azure.eventhub import EventHubClient, Sender, EventData

logger = logging.getLogger("azure")

ADDRESS = "amqps://myns.servicebus.windows.net/myeventhub"
USER = "RootManageSharedAccessKey"
KEY = "mykey"

try:
    if not ADDRESS: 
        raise ValueError("No EventHubs URL supplied.")

    # Create Event Hubs client
    client = EventHubClient(ADDRESS, debug=False, username=USER, password=KEY)
    sender = client.add_sender(partition="0")
    client.run()
    try:
    employee = [
        { "name": "sankar", "age": 28 }, 
        { "name": "Madhan", "age": 21 }, 
        { "name": "Vishwa", "age": 32 }
    ]

        start_time = time.time()
        for i in employee:
            print("Sending message: {}".format(i))
            sender.send(EventData(i))
    except:
        raise
    finally:
        end_time = time.time()
        client.stop()
        run_time = end_time - start_time
        logger.info("Runtime: {} seconds".format(run_time))

except KeyboardInterrupt:
    pass

发送时,我没有收到任何错误。

#Event_Hub_Receive.py
import os
import sys
import logging
import time
from azure.eventhub import EventHubClient, Receiver, Offset
import json

logger = logging.getLogger("azure")

ADDRESS = "amqps://myns.servicebus.windows.net/myeventhub"
USER = "RootManageSharedAccessKey"
KEY = "mykey"

CONSUMER_GROUP = "$default"
OFFSET = Offset("-1")
PARTITION = "0"

total = 0
last_sn = -1
last_offset = "-1"
client = EventHubClient(ADDRESS, debug=False, username=USER, password=KEY)
try:
    receiver = client.add_receiver(
        CONSUMER_GROUP, PARTITION, prefetch=5000, offset=OFFSET)
    client.run()
    start_time = time.time()
    for event_data in receiver.receive(timeout=100):
    data = event_data.body_as_json()
    print(data)

    end_time = time.time()
    client.stop()
    run_time = end_time - start_time
    print("Received {} messages in {} seconds".format(total, run_time))

except KeyboardInterrupt:
    pass
finally:
    client.stop()

我试图将数据作为json接收。但是抛出事件数据与JSON类型不兼容:无法解码JSON对象。

    raise TypeError("Event data is not compatible with JSON type: {}".format(e))
TypeError: Event data is not compatible with JSON type: No JSON object could be decoded

因此,我尝试将方法更改为event_data.body_as_str()。但我收到以下答复:

agename
agename
Received 0 messages in 0.263074874878 seconds

可以建议

1 个答案:

答案 0 :(得分:-1)

尝试这样做:

import json # add this 

for i in employee:
    print("Sending message: {}".format(i))
    sender.send(EventData(json.dumps(i)))

在这种情况下,i的类型似乎为dict