当前位置: 首页 > 知识库问答 >
问题:

无法在Python中解码Falcon测试的JSON主体

充浩波
2023-03-14

我正在尝试为Falcon框架编写一些pytests,并按照这里的说明进行操作。我想模拟一个POST请求。然而,我不断得到以下错误

测试/测试应用。29岁:29岁:29岁:以下以下学校的学生:29岁:以下以下学校学校的学生:29::uu\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\u..//harvester venv/lib/python2。7/现场包/猎鹰/测试/客户。py:170:in-json返回json。加载(self.text)/System/Library/Frameworks/Python。framework/Versions/2.7/lib/python2。7/json/init。py:338:in loads返回_default_解码器。解码/系统/库/框架/Python。framework/Versions/2.7/lib/python2。7/json/解码器。py:366:在解码obj中,end=self。原始解码(s,idx=_w(s,0)。end())

self=, s = '', idx=0

def raw_decode(self, s, idx=0):
    """Decode a JSON document from ``s`` (a ``str`` or ``unicode``
        beginning with a JSON document) and return a 2-tuple of the Python
        representation and the index in ``s`` where the document ended.

        This can be used to decode a JSON document from a string that may
        have extraneous data at the end.

        """
    try:
        obj, end = self.scan_once(s, idx)
    except StopIteration:
      raise ValueError("No JSON object could be decoded") E           ValueError: No JSON object could be decoded

/系统/库/框架/Python。framework/Versions/2.7/lib/python2。7/json/解码器。py:384:ValueError

这是我试图写的猎鹰测试。当我验证JSON时,我把数据变量放在JSONlint上。com它告诉我数据是有效的,所以问题似乎不在于格式。

import json

import pytest
from falcon import testing

from harvester.app import api


@pytest.fixture()
def client():
    return testing.TestClient(api)


def test_elasticsearch_endpoint(client):
    data = {
        "Type": "SubscriptionConfirmation",
        "MessageId": "0a069ec4-2e6f-4436-9f1d-aa55c3b048f9",
        "Token": "2336412f37fb68751e6e241d59b68cb9ca332001818266bdd4984dd60a76ff2c8a43220b28241ad0ae6659d6313bb2336e98d19bdbc52e0c99578ad43934324b5e73a20e9ad517741cf14a57793d052e9986038ee688a059b34e49746d106bcd597f18f7ff3560be204ef8cd339a3c5276bfa3cc784a7904c8720519387a0",
        "TopicArn": "arn:aws:sns:ap-south-1:141592612890",
        "SubscribeURL": "https://sns.ap-south-1.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:ap-south-1:141592612890:harvester_test&Token=2336412f37fb687f5d51e6e241d59b68cb9ca332001818266bdd4984dd60a76ff2c8a41ad0ae6659d6313bb2336e98d19bdbc52e0c99578ad43934324b5e73a20e9ad517741cf14a57793d052e9986038ee688a059b34e49746d106bcd597f18f7ff3560be204ef8cd339a3c5276bfa3cc784a7904c8720519387a0",
        "Timestamp": "2017-06-01T13:22:49.849Z",
        "SignatureVersion": "1",
        "Signature": "Pj9F8PrgqPkSuLjHtrJ9pmh3ZH3kZBaLs5Ywx1C0rrOc4PJp3hYiria9SZr1Xm8uE549khxDFIdAsnGee9fSeO7tZWSNI3W3gRLVnIJ0uAjxU0oicj3P7NnGQ5kUnihKva//Q39RlZOIr4OsxTvOrXnag6M32aC3pEFdBaXJqO0iJJOokT+mmoWa9BWfHXnb/ORAigo50BXsVNSN92PRZAZ7qTeypZSU70EF1+vKNt7mbxrOE2/wpOtb7uDfg/ZW8yZQQqr100bnQVfStDSp6MzID+vupQhM2PR/gS84INA+VdOUhxll/kEkDE98tR9OrNz/PITts5XSg==",
        "SigningCertURL": "https://sns.ap-south-1.amazonaws.com/SimpleNotificationService-b95095beb82e8f6a04.pem"
    }
    result = client.simulate_post('/v1/track/analytics', body=json.dumps(data))
    print result.json

你知道为什么会这样吗?

共有3个答案

卢光誉
2023-03-14

触发验证错误的是对result.json的调用,而不是您的POSTed JSON。大概您正在测试的elasticsearchendpoint正在发回一个非JSON错误文档。

https://github.com/falconry/falcon/blob/master/falcon/testing/client.py#L153

医生确实说,result。如果结果不能解析为json,json将抛出一个错误,但这肯定会更清晰!

http://falcon.readthedocs.io/en/stable/api/testing.html#falcon.testing.Result.json

申屠森
2023-03-14

不熟悉Falcon。但在这里大胆猜测一下:在您的夹具中,您只传递api类/函数定义,但您没有调用api()或调用api.create()。尝试:

@pytest.fixture()
def client():
    return testing.TestClient(api())  # or api.create() ?

同样错误的是,您在第29行发布了点,但您发布的代码段只包含27行。

陈铭晨
2023-03-14

第一步是在头中设置{“Content Type”:“application/json”}。

此外,您发送有效载荷的方式可以调整如下:

from urllib.parse import urlencode

data = urlencode({
        "Type": "SubscriptionConfirmation",
        "MessageId": "0a069ec4-2e6f-4436-9f1d-aa55c3b048f9",
        "Token": "2336412f37fb68751e6e241d59b68cb9ca332001818266bdd4984dd60a76ff2c8a43220b28241ad0ae6659d6313bb2336e98d19bdbc52e0c99578ad43934324b5e73a20e9ad517741cf14a57793d052e9986038ee688a059b34e49746d106bcd597f18f7ff3560be204ef8cd339a3c5276bfa3cc784a7904c8720519387a0",
        "TopicArn": "arn:aws:sns:ap-south-1:141592612890",
        "SubscribeURL": "https://sns.ap-south-1.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:ap-south-1:141592612890:harvester_test&Token=2336412f37fb687f5d51e6e241d59b68cb9ca332001818266bdd4984dd60a76ff2c8a41ad0ae6659d6313bb2336e98d19bdbc52e0c99578ad43934324b5e73a20e9ad517741cf14a57793d052e9986038ee688a059b34e49746d106bcd597f18f7ff3560be204ef8cd339a3c5276bfa3cc784a7904c8720519387a0",
        "Timestamp": "2017-06-01T13:22:49.849Z",
        "SignatureVersion": "1",
        "Signature": "Pj9F8PrgqPkSuLjHtrJ9pmh3ZH3kZBaLs5Ywx1C0rrOc4PJp3hYiria9SZr1Xm8uE549khxDFIdAsnGee9fSeO7tZWSNI3W3gRLVnIJ0uAjxU0oicj3P7NnGQ5kUnihKva//Q39RlZOIr4OsxTvOrXnag6M32aC3pEFdBaXJqO0iJJOokT+mmoWa9BWfHXnb/ORAigo50BXsVNSN92PRZAZ7qTeypZSU70EF1+vKNt7mbxrOE2/wpOtb7uDfg/ZW8yZQQqr100bnQVfStDSp6MzID+vupQhM2PR/gS84INA+VdOUhxll/kEkDE98tR9OrNz/PITts5XSg==",
        "SigningCertURL": "https://sns.ap-south-1.amazonaws.com/SimpleNotificationService-b95095beb82e8f6a04.pem"
})

headers = {"Content-Type": "application/json"}
result = client.simulate_post('/v1/track/analytics', body=data, headers=headers)

那么,这应该可以解决问题。让我知道。

 类似资料:
  • 问题内容: 我在JSON方面遇到问题,我似乎无法弄清为什么它不起作用。这应该输出JSON。 这是我的代码 我收到这个错误 如果有人可以救援,那就太好了! 问题答案: 看来您的JSON无效。在这种情况下,这完全取决于服务器发送给您的数据(您未显示)。我建议通过JSON验证程序运行响应。

  • 问题内容: 我想知道是否有一种方法可以解码类似JSON的字符串。 我得到了字符串: 这不是有效的JSON字符串,因此我无法直接使用python API对其进行解码。Python将仅接受字符串化的JSON字符串,例如: 其中属性被引用为字符串。 问题答案: 使用demjson模块,该模块具有在非严格模式下解码的能力。

  • 问题内容: 我正在尝试检查许多网站的页面上是否有某个单词。该脚本可以在15个站点上正常运行,然后停止。 UnicodeDecodeError:’utf8’编解码器无法解码位置15344处的字节0x96:无效的起始字节 我在stackoverflow上进行了搜索,发现了很多问题,但似乎无法理解我的情况出了什么问题。 我想解决它,或者如果有错误,请跳过该站点。请为我提供新手建议,下面的代码本身花了我一

  • 我是Python的初学者,我正试图学习如何使用数据结构,如JSON对象,但我在试图从JSON对象中实际获取数据时遇到了困难。 我可以通过已经有的代码打印文件中的数据,但是我只想打印某个值,比如的值。我如何使用我已经有的代码打印这个?

  • 本文向大家介绍Python中json格式数据的编码与解码方法详解,包括了Python中json格式数据的编码与解码方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python中json格式数据的编码与解码方法。分享给大家供大家参考,具体如下: python从2.6版本开始内置了json数据格式的处理方法。 1、json格式数据编码 在python中,json数据格式编码使用json