我现在在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 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()?
在执行enque操作之前,我需要获取请求主体并使用Retrofit 2.0执行一些逻辑操作.但遗憾的是,我无法通过服务电话获取帖子正文内容.目前搜索了很多之后,我发现好像只有一个办法logging了request,我现在用的改造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)
问题我面对上述方法:
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方法仅返回元数据而非请求发布数据.
请提供宝贵的提示和解决方案,帮助我解决这个问题.我不知道该怎么做.过去两天我完全坚持了这一点.如果我的问题太冗长,请原谅.欢迎你提出任何建议.如果我的要求不明确,请告诉我.提前致谢.
返回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')])
当我返回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)
但我得到了同样的错误.
想法?
我想通过调用 json 数据的 ajax 使我的当前更具交互性,除了研究和学习之外,我还没有做任何事情。这里有一些我不是很清楚。如果 JsonResponse 和 DRF 可以提供我需要的 json 数据,DRF 与 JsonResponse 有何不同?
我的控制器
@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)
查询与多个表以及列级别的子查询连接。
我使用其API密钥和一些其他参数从站点获取一些数据.我以JSON对象的形式获取数据.现在我的问题是如何在我的rails应用程序中使用这个JSON对象,可能会做一些事情,比如使用存储JSON对象的实例变量然后创建它的erb模板,该模板将显示实例变量的数组.我尝试了解Stack Overflow上的一些解决方案但是没有正确理解它们,一些更基本的级别帮助会很棒.
我正在处理的 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/') 解决了问题。
在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即可向用户发送正确的通知(图像已删除,未找到图像,图像...)
不敢相信我在任何地方都找不到解决方案。
谢谢
在我的 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"])。
我错过了什么吗?
谢谢你的时间。
这个问题的答案可能非常简单,但经过几个小时的搜索,我真的找不到它。
我正在尝试使用 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"}]'