0

我有输出Json

{
  "id": "641f295a-9db7-4013-a909-3fede326897d", 
  "result": {
    "action": "order_status", 
    "actionIncomplete": false, 
    "contexts": [], 
    "fulfillment": {
      "messages": [
        {
          "lang": "en", 
          "speech": "Please choose any of the following options: \n<ul class=\"botResponse\">\n<li><a href=\"#\" onclick=bot.sendEvent('Order_Details')> Order Status basis Order Number </a></li>\n<li><a href=\"#\" onclick=bot.sendEvent('Customer_Name')> Order Status basis Customer Name </a></li>\n</ul>", 
          "type": 0
        }
      ], 
      "speech": "Please choose any of the following options: \n<ul class=\"botResponse\">\n<li><a href=\"#\" onclick=bot.sendEvent('Order_Details')> Order Status basis Order Number </a></li>\n<li><a href=\"#\" onclick=bot.sendEvent('Customer_Name')> Order Status basis Customer Name </a></li>\n</ul>"
    }, 
    "metadata": {
      "intentId": "641f295a-9db7-4013-a909-3fede326897d", 
      "intentList": [
        "Order_Status"
      ], 
      "intentName": "Order_Status", 
      "webhookUsed": "false"
    }, 
    "parameters": {}, 
    "resolvedQuery": "status for all orders", 
    "score": 0.7271162920052577, 
    "source": "agent"
  }, 
  "sessionId": "12345", 
  "status": {
    "code": 200, 
    "errorType": "success"
  }, 
  "timestamp": "2019-07-26T18:05:44.357705"
}

并且需要与具有嵌套 dic 列表对象的相同类型的输入 json 进行比较。在列上:sessionId

status.code status.errorType

result.metadata.intentName

动作动作不完整

result.fulfillment.messages

result.fulfillment.speech

result.metadata.intentId

result.metadata.intentList

参数

结果.上下文

我已经完成了字符串比较,但是由于一些额外的字符,它给出了错误

4

1 回答 1

0
    def compare_1(self, source_data_a, source_data_b):
        def compare(data_a, data_b):
            if type(data_a) is list:
                if (type(data_b) != list) or (len(data_a) != len(data_b)):
                    return False
                for list_index, list_item in enumerate(data_a):
                    if not compare(list_item, data_b[list_index]):
                        return False
                return True
            if type(data_a) is dict:
                if type(data_b) != dict:
                    return False
                for dict_key, dict_value in data_a.items():
                    if (dict_key not in data_b) or (not compare(dict_value, data_b[dict_key])):
                        return False
                return True
            if (type(data_a) is str) and (type(data_b) is str):
                one, two = self.string(data_a, data_b)
                if one == two:
                    return True

            if (type(data_a) is int) or (type(data_a) is numpy.int64) or (type(data_a) is numpy.int32):
                if type(data_b) != int:
                    data_b = int(data_b)
                    return compare(data_a, data_b)
                else:
                    return data_a == data_b
            if (type(data_a) is numpy.bool_ or bool) and (type(data_b) is numpy.bool_ or bool):
                return data_a == data_b
            return (data_a == data_b) and (type(data_a) is type(data_b))

        return compare(source_data_a, source_data_b) and compare(source_data_b, source_data_a)```
于 2019-08-13T07:24:16.547 回答