我得到的一些JSON数据的键名中有空格。我正在使用标准encoding/json
库来解组数据。但是,它无法理解模式中带空格的键。例如下面的代码:
package main
import (
"encoding/json"
"fmt"
)
func main() {
var jsonBlob = []byte(`[
{"Na me": "Platypus", "Order": "Monotremata"},
{"Na me": "Quoll", "Order": "Dasyuromorphia"}
]`)
type Animal struct {
Name string `json: "Na me"`
Order string `json: "Order,omitempty"`
}
var animals []Animal
err := json.Unmarshal(jsonBlob, &animals)
if err != nil {
fmt.Println("error:", err)
}
fmt.Printf("%+v", animals)
}
输出为:
[{Name: Order:Monotremata} {Name: Order:Dasyuromorphia}]
因此,在架构中,库删除了空格(从 Na me中 删除),并尝试找到显然不存在的键( Name )。有什么建议可以在这里做什么?
您的json
标签规范不正确,这就是为什么encoding/json
库默认使用字段名称的原因Name
。但由于没有带"Name"
key的JSON字段,因此Animal.Name
将保持其零值(即空字符串""
)。
取消编组Order
将仍然有效,因为json
如果json
缺少标签说明(小写和大写尝试),程序包将使用字段名称。由于字段名称与JSON密钥相同,因此无需额外的JSON标签映射即可使用。
标签规范中的冒号后面和引号之前不能有空格:
type Animal struct {
Name string `json:"Na me"`
Order string `json:"Order,omitempty"`
}
通过这个简单的更改,它可以工作(在GoPlayground上尝试):
[{Name:Platypus Order:Monotremata} {Name:Quoll Order:Dasyuromorphia}]
PEMException:创建加密私钥时出现问题:System.NullReferenceException:对象引用未设置为对象的实例。在org.bouncycastle.openssl.pemreader.readprivateKey(PemObject PemObject) 下面是Decrypt方法的代码:
问题内容: 我想从Android应用程序执行ffmpeg,非常像这里所述:将FFmpeg与Android-NDK结合使用。 执行以下命令可以正常工作: 要么 但是,当输入或输出文件名包含空格时,ffmpeg失败,并显示“找不到文件”错误: FFMPEG对于包含空格的文件也失败,但引用如下: 如何正确将包含空格的文件名传递给ffmpeg命令? 问候, 问题答案: 我终于明白了。我忘记了一种可能性,而
问题内容: 我在将以下格式的json数据解组到结构时遇到麻烦。json的结构对我来说有点令人困惑,因此我为解组它所做的所有愚蠢的事情表示歉意。 我正在尝试使用以下结构将其解组。 这些字段在生成时将是未知的,并且会发生变化,并且存在此字段 在没有外部密钥的服务器名称之后,这再次让我感到困惑。我尝试了很多组合以了解如何将其解组,但是我失败了。 什么是使json字段解组为结构的有效方法? 问题答案: 您
问题内容: 关键字名称,JavaScript对象或JSON字符串中是否有任何禁止的字符?还是需要转义的字符? 更具体地说,我想在键名中使用“ $”,“-”和空格。 问题答案: 否。任何有效的字符串都是有效的密钥。只要您能逃脱它,它甚至可以拥有: 在将此类值加载到某些语言(尝试将键与对象字段名称关联)时,您可能会遇到困难。我不知道有任何这样的情况。
问题内容: 我希望使用该软件包封送在我的应用程序的一个导入软件包中声明的结构。 例如。: 因为是导入的,所以结构中所有可用的(导出的)字段都以大写字母开头。但我希望使用小写的键名: 将导致 {“ Foo”:42} 但我希望得到 {“ foo”:42} 是否可以通过一些简单的方法解决问题? 问题答案: 看一下encoding / json.Marshal 的文档。它讨论了如何使用struct字段标签
我得到了两个加密的文件。enc和加密的_数据。csv。附件。我需要使用我的私钥来解密加密的密钥。enc获取对称密钥,然后使用该对称密钥解密加密的_数据。csv。enc文件。 在终端上,以下命令完成作业: 我的目标是执行两个命令的java等效。我成功地解密了第一个文件并检索了对称密钥。 现在我无法使用对称密钥解密csv文件。我的问题出现在