Несколько «json.decoder.JSONDecodeError» в запросе SQL Server с более чем 25 строками на Python

#python #json #sql-server #udp #client

#питон #json #sql-сервер #udp #клиент

Вопрос:

Я получил эту ошибку от JSON, которая возникает только тогда, когда я пытаюсь запросить таблицу с более чем 25 строками. Есть ли способ получить больше строк из запроса? Как и сейчас, я использую top(20) свой запрос для решения этой проблемы. Вот код со стороны клиента, со стороны сервера и ошибка под ним.

Клиент

 clientSocket=socket(AF_INET,SOCK_DGRAM) sql='4' send=json.dumps({"a":sql}) clientSocket.sendto(send.encode(),(serverName,serverPort)) message,serverAddress=clientSocket.recvfrom(2048) message=json.loads(message.decode()) message=message.get("a") clientSocket.close()  clientSocket=socket(AF_INET,SOCK_DGRAM) sql='2' ID=int(input()) choice=switch(1) book=int(input()) arr=[] if(IDlt;=len(message)):  arr.append(ID) for p in range(len(choice)):  if(choice[p][0]==book):  arr.append(choice[p][0])  if(len(arr)lt;2):  return  send=json.dumps({"a":sql,"b":arr}) clientSocket.sendto(send.encode(),(serverName,serverPort))  message,serverAddress=clientSocket.recvfrom(2048) print(message[2000:2060]) message=json.loads(message.decode()) le=int(len(message.get("a"))-1)  me=message.get("a") print('%s ss0s0s'%(me[0][0],me[0][1],me[0][2],me[0][3],me[0][4])) print(message.get("a")[le-1]) clientSocket.close()  

Сервер (я включаю только sql='2' часть, так sql='4' как имеет тот же базовый код).

 message, clientAddress=serverSocket.recvfrom(2048) message=json.loads(message.decode()) result=pd.read_sql('SELECT 1',cnxn).values  arr=message.get("b") sql="EXEC MASTERBORROW @ID_STUDENT=?,@ID_BOOK=?,@COMMAND='ADD'"  cursor.execute(sql,arr) cnxn.commit()  result=pd.read_sql("EXEC MASTERBORROW @COMMAND='SELECT'",cnxn)  result['ID_BORROW']=result['ID_BORROW'].astype(str) result['BORROW_DATE']=result['BORROW_DATE'].astype(str) result['RETURN_DATE']=result['RETURN_DATE'].astype(str) result=result.values  returns=json.dumps({"a":result.tolist()}) serverSocket.sendto(returns.encode(),(clientAddress))  

Это один из результатов. Первая строка взята из, print(message[2000:2060]) которая показывает, что в запросе нет ничего плохого.

 b'01 09:22:24.057", "2021-12-08 23:59:59.997"], ["' Traceback (most recent call last):  File "/Python/Cient.py", line 160, in lt;modulegt;  switch(comm)  File "/Python/Cient.py", line 64, in switch  message=json.loads(message.decode())  File "/usr/lib/python3.9/json/__init__.py", line 346, in loads  return _default_decoder.decode(s)  File "/usr/lib/python3.9/json/decoder.py", line 337, in decode  obj, end = self.raw_decode(s, idx=_w(s, 0).end())  File "/usr/lib/python3.9/json/decoder.py", line 353, in raw_decode  obj, end = self.scan_once(s, idx) json.decoder.JSONDecodeError: Unterminated string starting at: line 1 column 2048 (char 2047)  

Это некоторые другие результаты. Никаких изменений в коде. Это случайно в зависимости от того, какой элемент я выбрал на входе

 json.decoder.JSONDecodeError: Expecting value: line 1 column 2049 (char 2048) json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 2049 (char 2048) json.decoder.JSONDecodeError: Unterminated string starting at: line 1 column 2043 (char 2042)  

Это из-за того, что я использую UDP, или это что-то другое?

Комментарии:

1. Похоже, что анализатор JSON разбивается на 2048 байтах, что имеет смысл, потому что буфер датаграмм составляет 2048 байтов.

2. Примечание: print(message[2000:2060]) отпечатки b'01 09:22:24.057", "2021-12-08 23:59:59.997"], ["' … что составляет 48 байт, а не 60.

3. ох, черт возьми, я виноват. я скопировал часть кода из своего более старого несвязанного проекта, спасибо, что указали на это