看到这段代码:
<html>
<head>
<script src="http://www.json.org/json2.js" type="text/javascript"></script>
<script type="text/javascript">
var jsonString = '{"id":714341252076979033,"type":"FUZZY"}';
var jsonParsed = JSON.parse(jsonString);
console.log(jsonString, jsonParsed);
</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我在Firefox 3.5中看到我的控制台时,jsonParsed的值是:
Object id=714341252076979100 type=FUZZY
Run Code Online (Sandbox Code Playgroud)
即数字四舍五入.尝试了不同的值,相同的结果(数字舍入).
我也没有得到它的舍入规则.714341252076979136舍入为714341252076979200,而714341252076979135舍入为714341252076979100.
编辑:请参阅下面的第一条评论.显然这不是关于JSON,而是关于JavaScript数字处理的东西.但问题仍然存在:
为什么会这样?
我有一个Django Web应用程序,它使用默认的自动递增正整数作为主键.此密钥在整个应用程序中使用,并经常插入到URL中.我不想向公众公开这个号码,以便他们可以猜测我的数据库中的用户或其他实体的数量.
这是一个经常要求,我已经向类似的矿山看到了问题和答案.大多数解决方案建议散列原始主键值.但是,这些答案都不符合我的需要.这些是我的要求:
实现这一目标的最佳方法是什么?以下工作会怎样?
def hash_function(int):
return fancy-hash-function # What function should I use??
def obfuscate_pk(sender, instance, created, **kwargs):
if created:
logger.info("MyClass #%s, created with created=%s: %s" % (instance.pk, created, instance))
instance.pk = hash_function(instance.pk)
instance.save()
logger.info("\tNew Pk=%s" % instance.pk)
class MyClass(models.Model):
blahblah = models.CharField(max_length=50, null=False, blank=False,)
post_save.connect(obfuscate_pk, sender=MyClass)
Run Code Online (Sandbox Code Playgroud)