我有一个JSON格式的solr响应,如下所示:
var temp map[string]interface{}
if err := json.Unmarshal(body, &temp); err != nil {
panic(err.Error())
}
result, err := json.Marshal(temp["response"])
现在,在我的Golang应用程序中,我想快速删除“responseHeader”,以便我可以单独返回“响应”。如何在不创建大型结构的情况下实现这一目标?
evanmcdonnal的答案是这个问题的解决方案,但它有一些小错字,这是我最终使用的:
.maincols {
display: flex;
flex-wrap:wrap;
width:100%;
border:solid;
margin:1em 0;
}
.maincol {
min-width: 25%;/* can grow wider */
box-shadow:inset 0 0 0 1px ;
}
.maincol:last-of-type {
flex: 1;/* fills up whole room left */
text-align:center;
}
答案 0 :(得分:5)
以下是如何快速轻松地完成此操作的简短示例。步骤是;然后,在没有错误的情况下解组为通用var temp := &map[string]interface{}
if err := json.Unmarshal(input, temp); err != nil {
return err;
}
return json.Marshal(temp["response"])
,只编组你想要的内部对象。
public class Execute extends JFrame {
public Execute() {
initUI();
}
public void initUI() {
// you were creating an entirely different frame here
// instead initialize **this** frame
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,600);
setTitle("I am the salad baby");
add(new Board());
}
// ...
}
答案 1 :(得分:0)
我编写了一个包 µjson 来做到这一点:对 JSON 文档执行通用转换而不解组它们。
input := []byte(`
{
"responseHeader": {
"status": 0,
"QTime": 0,
"params": {
"q": "solo",
"wt": "json"
}
},
"response": {
"numFound": 2,
"start": 0,
"docs": [
{ "name": "foo" },
{ "name": "bar" }
]
}
}`)
blacklistFields := [][]byte{
[]byte(`"responseHeader"`), // note the quotes
}
b := make([]byte, 0, 1024)
err := ujson.Walk(input, func(_ int, key, value []byte) bool {
for _, blacklist := range blacklistFields {
if bytes.Equal(key, blacklist) {
// remove the key and value from the output
return false
}
}
// write to output
if len(b) != 0 && ujson.ShouldAddComma(value, b[len(b)-1]) {
b = append(b, ',')
}
if len(key) > 0 {
b = append(b, key...)
b = append(b, ':')
}
b = append(b, value...)
return true
})
if err != nil {
panic(err)
}
fmt.Printf("%s", b)
// Output: {"response":{"numFound":2,"start":0,"docs":[{"name":"foo"},{"name":"bar"}]}}
你可以read more about it on the blog post。我把答案放在这里以防其他人可能需要它。