标签: jsonresponse

使用JSONResponse在Django 1.7中序列化QuerySet?

我现在在Django 1.7中看到了我可以使用该http.JSONResponse对象将JSON发送到客户端.我的观点是:

#Ajax
def get_chat(request):
    usuario = request.GET.get('usuario_consultor', None)
    usuario_chat = request.GET.get('usuario_chat', None)

    mensajes = list(MensajeDirecto.objects.filter(Q(usuario_remitente = usuario, usuario_destinatario = usuario_chat) | Q(usuario_remitente = usuario_chat, usuario_destinatario = usuario)))


    return JsonResponse(mensajes, safe=False)
Run Code Online (Sandbox Code Playgroud)

但我得到了下一个错误:

<MensajeDirecto:Towi CrisTowi>不是JSON可序列化的

你知道如何序列化QuerySet以JSON形式发回它吗?

python django ajax jsonresponse

20
推荐指数
2
解决办法
2万
查看次数

如何使用Django的assertJSONEqual来验证返回JsonResponse的视图的响应

我正在使用Python 3.4和Django 1.7.我有一个观点回归JsonResponse.

def add_item_to_collection(request):
    #(...)
    return JsonResponse({'status':'success'})
Run Code Online (Sandbox Code Playgroud)

我想验证该视图是否使用单元测试返回正确的响应:

class AddItemToCollectionTest(TestCase):

    def test_success_when_not_added_before(self):
        response = self.client.post('/add-item-to-collection')
        self.assertEqual(response.status_code, 200)
        self.assertJSONEqual(response.content, {'status': 'success'})
Run Code Online (Sandbox Code Playgroud)

但该assertJSONEqual()行提出了一个例外:

Error
Traceback (most recent call last):
  File "E:\Projects\collecthub\app\collecthub\collecting\tests.py", line 148, in test_success_when_added_before
    self.assertJSONEqual(response.content, {'status': 'OK'})
  File "E:\Projects\collecthub\venv\lib\site-packages\django\test\testcases.py", line 675, in assertJSONEqual
    data = json.loads(raw)
  File "C:\Python34\Lib\json\__init__.py", line 312, in loads
    s.__class__.__name__))
TypeError: the JSON object must be str, not 'bytes'
Run Code Online (Sandbox Code Playgroud)

当响应包含JSON时,检查响应内容的正确方法是什么?当我尝试比较原始值时,为什么我会出现类型错误assertJSONEqual()

python django django-testing python-3.x jsonresponse

20
推荐指数
2
解决办法
1万
查看次数

使用Retrofit 2.0 POST方法获取请求正文内容

在执行enque操作之前,我需要获取请求主体并使用Retrofit 2.0执行一些逻辑操作.但遗憾的是,我无法通过服务电话获取帖子正文内容.目前搜索了很多之后,我发现好像只有一个办法loggingrequest,我现在用的改造2.0可以发布该方法通过使用HttpLoggingInterceptor具有OkHttpClient.我使用以下代码在Android Logcat中记录请求正文:

HttpLoggingInterceptor logging = new HttpLoggingInterceptor();  
       logging.setLevel(Level.BODY);
    OkHttpClient httpClient = new OkHttpClient();
    httpClient.interceptors().add(logging);

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseURL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    return retrofit.create(apiClass);
Run Code Online (Sandbox Code Playgroud)

问题我面对上述方法:

  1. 请求正文仅在默认的Android Logcat上看到

02-04 01:35:59.235 5007-5035/com.example.retrofitdemo D/OkHttp:{"nameValuePairs":{"id":"1","name":"chandru","type":"user"}}

但是上面的方法只返回logcat中的响应体,我无法将其作为String或者JSONObject.尽管如果我能够使用响应体HttpLoggingInterceptor,我的请求体将一直显示在Logcat中,标签为"OkHttp",即使在应用程序进入生产之后也是如此(所以主要是这样一种解除帖子的方式logcat中的数据).

我的要求:

我需要在不对Logcat中的post数据进行修改的情况下将请求体作为String或者JSONObject任何方法获取.

我尝试了什么:

我试图获取请求正文,即使onResponse从以后Response<T> response,但我无法完成它可能.请找到我为此目的使用的代码,如下所示:

 Gson gson = new Gson();
 String responseString =  gson.toJson(response.raw().request().body());
Run Code Online (Sandbox Code Playgroud)

注意:上述转换后的请求正文使用gson.toJson方法仅返回元数据而非请求发布数据.

请提供宝贵的提示和解决方案,帮助我解决这个问题.我不知道该怎么做.过去两天我完全坚持了这一点.如果我的问题太冗长,请原谅.欢迎你提出任何建议.如果我的要求不明确,请告诉我.提前致谢.

android request okhttp jsonresponse retrofit2

13
推荐指数
1
解决办法
2万
查看次数

Map对象不是JSON可序列化的

返回a时会发生这种情况JSONResponse,这是在Django 1.7中添加的.并且是一个包装json.dumps.但是,在这种情况下会导致错误.我确信数据是正确的,可以通过Python shell序列化为JSON.

将数据序列化为JSON的正确方法是什么?

from django.http import JsonResponse
from collections import OrderedDict

data = OrderedDict([('doc', '546546545'), ('order', '98745'), ('nothing', '0.0')])

return JsonResponse(data) # doesn't work, JSONRenderer().render(data) works
Run Code Online (Sandbox Code Playgroud)

结果出现此错误:

<map object at 0x7fa3435f3048> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

print(data) 得到:

OrderedDict([('doc', '546546545'), ('order', '98745'), ('nothing', '0.0')])

python django json python-3.x jsonresponse

11
推荐指数
2
解决办法
9219
查看次数

Debian Stable php-5.4上的Symfony2 JsonResponse utf8编码问题

当我返回UTF8字符时,我在Debian Stable php5(5.4.39-0 + deb7u1)上遇到JsonResponse问题.

我在Debian Testing php5(5.6.6 + dfsg-2)上开发了一个应用程序,下面的代码就像一个魅力:

$response = new JsonResponse();
$response->headers->set('Content-Type', 'application/json');
$response->setData($data);
return $response;
Run Code Online (Sandbox Code Playgroud)

但是在部署到稳定的prod服务器之后,我开始为完全相同的DB/Data字符集等获得以下异常:

request.CRITICAL: Uncaught PHP Exception InvalidArgumentException: "Malformed UTF-8 characters, 
possibly incorrectly encoded." at /site/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/JsonResponse.php
 line 123 {"exception":"[object] (InvalidArgumentException(code: 0): 
Malformed UTF-8 characters, possibly incorrectly encoded. at 
/site/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/JsonResponse.php:123)"} []
Run Code Online (Sandbox Code Playgroud)

作为$ data DO传递的DB的响应包含我无法控制的UTF8字符.我只需要显示它们.

我想我遇到了5.4的bug,但是我怎么能轻松地走动呢?我试过了:

    $response = new JsonResponse();
    $response->headers->set('Content-Type', 'application/json');
    $response->setEncodingOptions(JSON_UNESCAPED_UNICODE);
    $response->setData($data);
    return $response;
Run Code Online (Sandbox Code Playgroud)

但我得到了同样的错误.

想法?

php utf-8 symfony jsonresponse

10
推荐指数
1
解决办法
6734
查看次数

Django Rest Framework 或 JsonResponse

我想通过调用 json 数据的 ajax 使我的当前更具交互性,除了研究和学习之外,我还没有做任何事情。这里有一些我不是很清楚。如果 JsonResponse 和 DRF 可以提供我需要的 json 数据,DRF 与 JsonResponse 有何不同?

django django-rest-framework jsonresponse

8
推荐指数
1
解决办法
3562
查看次数

在Spring Boot、Hibernate中使用@Query注解查询JSON格式(键值对)结果

我的控制器

@GetMapping(value="/getAllDetails")
public List<PriceListEntity> getAllDetails() {
    return MyRepository.getAllDetails();
}
Run Code Online (Sandbox Code Playgroud)

我的仓库

@Repository
public interface MyRepository extends CrudRepository<TestNativeQ, String> {
    @Query( value="SELECT qplt.name price_list_name,  qplab.status_code, qplab.start_date, (SELECT charge_definition_code FROM oalfsaas_repl.QP_CHARGE_DEFINITIONS_B WHERE charge_definition_id=qplab.charge_definition_id  ) chargedefinitioncode "
            + "FROM  PriceListEntity qplab, PriceListLineEntity qplt "
            + " WHERE qplab.price_list_id  =qplt.price_list_id ", nativeQuery = false)
    public List<PriceListEntity> getAllDetails();
}
Run Code Online (Sandbox Code Playgroud)

实际结果:

[{"ABC", "DEF", "15/05/2018", "XXZ"}]
Run Code Online (Sandbox Code Playgroud)

预期结果

[{name: "ABC", statuscode: "DEF", startDate: "15/05/2018", chargedefintioncode: "XXZ"}]
Run Code Online (Sandbox Code Playgroud)

查询与多个表以及列级别的子查询连接。

json dto spring-data-jpa spring-boot jsonresponse

6
推荐指数
1
解决办法
4721
查看次数

使用从rails中的URL返回的JSON对象

我使用其API密钥和一些其他参数从站点获取一些数据.我以JSON对象的形式获取数据.现在我的问题是如何在我的rails应用程序中使用这个JSON对象,可能会做一些事情,比如使用存储JSON对象的实例变量然后创建它的erb模板,该模板将显示实例变量的数组.我尝试了解Stack Overflow上的一些解决方案但是没有正确理解它们,一些更基本的级别帮助会很棒.

ruby json ruby-on-rails jsonresponse

5
推荐指数
1
解决办法
385
查看次数

Django JsonResponse 返回内容类型 text/html 而不是 application/json

我正在处理的 django 网络项目陷入了死胡同,我似乎找不到任何答案。我正在尝试测试一个像这样简单的视图:

def list(request):
    return JsonResponse( {"foo": "bar"} )
Run Code Online (Sandbox Code Playgroud)

似乎一切顺利。如果我在浏览器上打开网站并检查页面信息,它会显示“类型:应用程序/json”。

但是,当我在 travis ci 上运行以下测试时:

def setUpTestData(cls):
    cls.client = Client()
    #A few lines of setting up test-data

def test_content_type(self):
    response = self.client.get('/api/list')
    self.assertEqual(response['content-type'], 'application/json')
Run Code Online (Sandbox Code Playgroud)

我得到以下失败:

FAIL: test_content_type (researchlibrary.api.tests.test_list.ListTests)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "/home/travis/build/FUB-HCC/ACE-Research-Library/researchlibrary/api/tests/test_list.py", line 25, in test_content_type
    self.assertEqual(response['content-type'], 'application/json')
AssertionError: 'text/html' != 'application/json'
- text/html
+ application/json
Run Code Online (Sandbox Code Playgroud)

网址都很好。测试收到正确的页面,只是类型似乎是 text/html 而不是 application/json,我不知道为什么会这样。

任何人都知道为什么会这样?

编辑:将 self.client.get('/api/list') 更改为 self.client.get('/api/list/') 解决了问题。

python django json travis-ci jsonresponse

5
推荐指数
1
解决办法
2016
查看次数

从Laravel中的json响应中提取statusCode

在Laravel 5.4中工作

删除图像后(在我的ImageRepository中),我将Json响应发送回我的控制器(在这里我称为ImageRepository)。现在,我只想查看要返回的状态码以进一步构建。

return Response::json([
    'error' => false,
    'code'  => 200,
    'message' => 'Image was deleted!'
], 200);
Run Code Online (Sandbox Code Playgroud)

当我在Controller中收到此响应时dd();,我看到以下内容:

JsonResponse {#461 ?
  #data: "{"error":false,"code":200,"message":"Image was deleted!"}"
  #callback: null
  #encodingOptions: 0
  +headers: ResponseHeaderBag {#459 ?}
  #content: "{"error":false,"code":200,"message":"Image was deleted!"}"
  #version: "1.0"
  #statusCode: 200
  #statusText: "OK"
  #charset: null
  +original: array:3 [?]
  +exception: null
}
Run Code Online (Sandbox Code Playgroud)

我只需要提取statusCode即可向用户发送正确的通知(图像已删除,未找到图像,图像...)

不敢相信我在任何地方都找不到解决方案。
谢谢

http-status-codes laravel-5 jsonresponse

5
推荐指数
1
解决办法
3771
查看次数

JsonResponse 中的 Django HttpResponse

在我的 django 项目中,为了避免另一个请求,我想返回一个带有 HttpResponse 的 JsonResponse,如下所示:

JsonResponse({"known": True, "space": render(request, 'space.html')}, status=200)

Django进程返回正常的内部错误Object of type HttpResponse is not JSON serializable

我尝试了所有的网络解决方案(序列化器等),但找不到一种方法来返回带有字典条目的 json 格式(我的 javascript 必需的),其中一个是我可以与 then 一起使用的整个 html 页面$("body").html(response["space"])

我错过了什么吗?

谢谢你的时间。

python django serialization httpresponse jsonresponse

1
推荐指数
1
解决办法
843
查看次数

如何从 Pandas DataFrame 返回数据以供 Django 的 JsonResponse 返回?

这个问题的答案可能非常简单,但经过几个小时的搜索,我真的找不到它。

我正在尝试使用 Django 从 pandas 数据帧返回 JsonResponse。我尝试过的众多事情之一如下:

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import pandas as pd

@csrf_exempt
def do_request(request):
    result = pd.DataFrame({'bla':[1,2,3],'bla2':['a','b','c']}).to_json(orient='records')
    return JsonResponse(result, safe = False)
Run Code Online (Sandbox Code Playgroud)

以下最终返回:

"[{\"bla\":1,\"bla2\":\"a\"},{\"bla\":2,\"bla2\":\"b\"},{\"bla\":3,\"bla2\":\"c\"}]"

事实上我希望它返回:

'[{"bla":1,"bla2":"a"},{"bla":2,"bla2":"b"},{"bla":3,"bla2":"c"}]'

python django pandas to-json jsonresponse

0
推荐指数
1
解决办法
2942
查看次数