如果已经问过这个,请原谅我。我从一个简单的python代码片段中看到了一些奇怪的结果:
import json
''' copy contents of one json file into another '''
with open('./new_file.json', 'w') as f1:
with open('./old_file.json') as f2:
data = json.load(f2)
json.dump(data, f1)
上面的代码片段将一个json文件的内容复制到另一个文件中。原始文件的格式不正确(即内容全部在一行上)
运行代码后,然后执行以下操作:
$ diff -q new_file.json old_file.json
Files new_file.json and old_file.json differ
文件内容显然不同,这很奇怪。 然后我尝试做:
$ cat new_file.json | python -m json.tool > foo
$ cat old_file.json | python -m json.tool > bar
然后当我比较文件bar和foo时,我得到:
:~/$ diff -q foo bar
:~/$
这表明格式化后得到的内容是相同的。有什么解释吗?
谢谢。
答案 0 :(得分:0)
您已经指出:文件格式。一个文件只有一行,另一文件可能有更多行。空格可以来去去...所有这些格式设置都会使文件不同,但是内容本质上是相同的。
答案 1 :(得分:0)
这里是对您看到的行为的最小重新表达。仔细阅读一下,看看您是否仍然对False
的{{1}}而不是new==old
的{{1}}感到困惑。这几乎是自我解释。
True
对此进行扩展。您会看到,运行该工具可以修复所有不需要的格式。因此,最初两个文件是不同的。但是,由于在已经格式化的内容上重新运行该工具只会返回相同的结果,因此在旧文件和新文件上运行该工具将只重现两次相同的输出,即格式化后的输出。
答案 2 :(得分:0)
json对象为defined as "an unordered set of name/value pairs",Python dicts也是如此(至少直到python 3.7),因此system.time({
output <- rep(NA, 100); for (i in 1:100) {
output[i] <- i + 1
}}
)
创建的dicts的键可以以不同的顺序排列。然后,当您Option Explicit
Sub ForEach_Loop()
Dim TrackerLastRow As Long, TrackerCurrentRow As Long
Dim ContractLastRow As Long, ContractCurrentRow As Long
With Worksheets("Contracts")
ContractLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
ContractCurrentRow = 1
End With
With Worksheets("Customer Tracker - OC")
TrackerLastRow = .Cells(.Rows.Count, "T").End(xlUp).Row
TrackerCurrentRow = 1
Do While TrackerCurrentRow <= TrackerLastRow
If .Cells(TrackerCurrentRow, "T").Value = "Yes" Then
Worksheets("Contracts").Range("A" & ContractCurrentRow) = .Range("T" & TrackerCurrentRow).Offset(0, 1).Value
Worksheets("Contracts").Range("B" & ContractCurrentRow) = .Range("T" & TrackerCurrentRow).Offset(0, 2).Value
ContractCurrentRow = ContractCurrentRow + 1
End If
TrackerCurrentRow = TrackerCurrentRow + 1
Loop
End With
End Sub
那些字典时,将使用当前的字典键顺序来生成json。
示例:
json.load()
问题在于,由于密钥顺序在json中并不重要,因此json.dump()
并不是检查两个json字符串是否真的不同的正确工具-并且它们确实是执行{{3 }}。
正如Poshi和Vincent所提到的那样,这两个json字符串与json数据等效,而与文本不同:
$ cat old.json
{"a": 42, "c": {"baaz": "quux", "foo": "bar"}, "b": [1, 2, 3]}
$ cat new.json
{"a": 42, "b": [1, 2, 3], "c": {"foo": "bar", "baaz": "quux"}}
$ diff -q old.json new.json
Les fichiers old.json et new.json sont différents
d$ python
(...)
>>> import json
>>> with open("old.json") as f:
... old = json.load(f)
>>> with open("new.json") as f:
... new = json.load(f)
...
>>> old == new
True
>>>