我在代码中使用了json
。我在Objective-C
和python
(当然是3)中使用它。有一天,我可能会被迫在java
中使用它。所有这些平台都有用于将json
字符串解析为本机对象的库,通常是包含其中内容的字典。
所以每次我编写一个产生或消耗json数据的方法/函数时,我总是被撕裂。因为有时它们会以字符串形式消费或生成它,有时它们会以更高级别的形式消费或生成它。
例如,假设我有一个Script
对象可以调整某些调度,我可以将其转换为json
以便于http传输或mongo-ification等等。所以我提出了两种方法:
class Script(object):
def toJson(self):
...
def fromJson(self, json):
...
虽然这些方法表明Script
对象可以填充自身或通过json
表示自己,但是完全不清楚哪种形式。 json
变量是dict
还是字符串?
所以我想知道其他人是否已经发展出有助于澄清这一点的命名约定?
答案 0 :(得分:1)
我遇到了类似的问题(在我的例子中,它是xml)。它可能不是很优雅,但我倾向于在返回该类型时使用类型名称,并在返回类型的字符串化版本时附加“str”。例如:
class Script:
def tojson(self):
...
def tojsonstr(self):
...
def fromjson(self, json):
...
def fromjsonstr(self, jsonstr):
...
我已经尝试过添加下划线,但从长远来看,这只会产生繁琐的标识符(而且我的手指会扭曲输入更长的字符串)。
我想你可以变聪明,并测试传递的isinstance对象(至少在fromX()的情况下,例如:
def fromjson(self, json):
if isinstance(json, basestring):
# assume str
else:
# assume json object
...
答案 1 :(得分:0)
因为我也做了一些pymongo,通常将这些结构化词典称为 docs ,我开始使用该术语(在与其他地方的许多同行讨论这个问题之后)。所以我的方法/功能看起来像:
def toDoc(self):
...
和
- (void) fromDoc: (NSDictionary*) doc {
...
}
然后,如果我想用那些使用json变体进行字符串编码的方法,我用JSON
命名。
我最终意识到,在JavaScript本身中,这并没有出现,因为它只是一个对象。但是对于像Python
和ObjectiveC
这样的语言,当我们在域对象和JSON之间切换时,我们倾向于使用中间文字对象,如字典和列表。我真正需要的是一些意思是“JavaScriptishObjectStructure”或类似的东西。