From 6e6d80bf5e5e188ec3aa4edb09add7b59506b47f Mon Sep 17 00:00:00 2001 From: "cai.zhang" Date: Thu, 1 Feb 2024 12:04:58 +0800 Subject: [PATCH] Fix bug for insert ndarray in json field (#1907) Signed-off-by: Cai Zhang --- pymilvus/client/entity_helper.py | 15 +++++++++++++-- pymilvus/exceptions.py | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pymilvus/client/entity_helper.py b/pymilvus/client/entity_helper.py index 163ae065a..72eca8c42 100644 --- a/pymilvus/client/entity_helper.py +++ b/pymilvus/client/entity_helper.py @@ -3,7 +3,12 @@ import numpy as np import ujson -from pymilvus.exceptions import MilvusException, ParamError +from pymilvus.exceptions import ( + DataNotMatchException, + ExceptionsMessage, + MilvusException, + ParamError, +) from pymilvus.grpc_gen import schema_pb2 as schema_types from pymilvus.settings import Config @@ -56,13 +61,19 @@ def entity_to_str_arr(entity: Any, field_info: Any, check: bool = True): def convert_to_json(obj: object): + if isinstance(obj, dict): + for k, v in obj.items(): + if not isinstance(k, str): + raise DataNotMatchException(message=ExceptionsMessage.JSONKeyMustBeStr) + if isinstance(v, np.ndarray): + obj[k] = v.tolist() return ujson.dumps(obj, ensure_ascii=False).encode(Config.EncodeProtocol) def convert_to_json_arr(objs: List[object]): arr = [] for obj in objs: - arr.append(ujson.dumps(obj, ensure_ascii=False).encode(Config.EncodeProtocol)) + arr.append(convert_to_json(obj)) return arr diff --git a/pymilvus/exceptions.py b/pymilvus/exceptions.py index 5e9ee525d..9f122801a 100644 --- a/pymilvus/exceptions.py +++ b/pymilvus/exceptions.py @@ -218,3 +218,4 @@ class ExceptionsMessage: AmbiguousQueryFilterParam = ( "Ambiguous parameter, either ids or filter should be specified, cannot support both." ) + JSONKeyMustBeStr = "JSON key must be str."