我在将JavaScript代码段转换为Python时遇到问题。
JavaScript代码如下所示:
const reviver = (_key, value) => {
try {
return JSON.parse(value, reviver);
} catch {
if(typeof value === 'string') {
const semiValues = value.split(';');
if(semiValues.length > 1) {
return stringToObject(JSON.stringify(semiValues));
}
const commaValues = value.split(',');
if(commaValues.length > 1) {
return stringToObject(JSON.stringify(commaValues));
}
}
const int = Number(value);
if(value.length && !isNaN(int)) {
return int;
}
return value;
}
};
const stringToObject = (str) => {
const formatted = str.replace(/"{/g, '{').replace(/}"/g, '}').replace(/"\[/g, '[').replace(/\]"/g, ']').replace(/\\"/g, '"');
return JSON.parse(formatted, reviver);
};
该功能的目标是:
- 解析数字字符串值
- 使用以下规则解析json字符串值
- 字符串值(如
"499,504;554,634"
)应解析为[(499, 504), (554, 634)]
我试过使用JSONDecoder。
import json
def object_hook(value):
try:
return json.loads(value)
except:
if(isinstance(value, str)):
semiValues = value.split(';')
if(len(semiValues) > 1):
return parse_response(json.dumps(semiValues))
commaValues = value.split(',')
if(commaValues.length > 1):
return parse_response(json.dumps(commaValues))
try:
return float(value)
except ValueError:
return value
def parse_response(data: str):
formatted = data.replace("\"{", "{").replace("}\"", '}').replace("\"[", '[').replace("]\"", ']').replace("\\\"", "\"")
return json.load(formatted, object_hook=object_hook)
3条答案
按热度按时间lmvvr0a81#
Python代码看起来是正确的,但也有一些问题。首先,在if语句中使用了
commaValues
.length而不是len(commaValues)
来检查commaValues
的长度是否大于1
。其次,json.load()
需要一个类似文件的对象作为它的第一个参数。不是字符串。可以使用json.loads()
来解析JSON字符串。下面是我用Python编写代码的方法:
注意,我还修改了try语句,尝试将字符串转换为数字,使用
int()
而不是float()
将值解析为整数,而不是浮点数。我还修改了函数和变量名,以遵循Python约定,使用小写单词并用下划线分隔(例如,使用string_to_object
而不是stringToObject
)。o0lyfsai2#
我通过迭代这些值并相应地解析它们来解决我的问题
tct7dpnv3#
这段代码对您有效吗?