当前位置: 首页 > 面试题库 >

有没有办法在golang中格式化此json?

籍弘伟
2023-03-14
问题内容

我今天才刚刚开始学习GoLang,我正在尝试构建一个简单的Rest API Web服务器

这是我希望将每个请求发送到Web服务器的响应结构:

package main

type HttpResp struct{
    Status      int         `json:"status"`
    Description string      `json:"description"`
    Body        string      `json:"body"`
}

这是我的 articles.go 文件,该文件具有获取数据库中所有文章的功能:

package main

import (
    "encoding/json"
    "net/http"
    "log"
)

type Article struct{
    Id          string  `json:"id"`
    Title       string  `json:"title"`
    Body        string  `json:"body"`
    Description string  `json:"description"`
}

func AllArticles(w http.ResponseWriter, r *http.Request){
    log.Print("/articles - GET")
    db := connect()
    defer db.Close()

    var articles []Article
    results, err := db.Query("SELECT * FROM Articles")

    if err != nil{
        log.Print(err)
        return
    }

    for results.Next(){
        var article Article
        err = results.Scan(&article.Title, &article.Description, &article.Body, &article.Id)

        if err != nil{
            serr, _ := json.Marshal(err)
            json.NewEncoder(w).Encode(HttpResp{Status: 500, Description: "Failed to retrieve all articles", Body: string(serr)})
        }

        articles = append(articles, article)
    }   
    sarr, _ := json.Marshal(articles)

    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(HttpResp{Status: 200, Body: string(sarr)})
}

我在这里面临的问题是响应是这样的:

{“状态”:200,“描述”:“”,“正文”:“ [{\” id \“:\” 1 \“,\”标题\“:\”第一\“,\”正文\“
:\“这是一个测试主体\”,\“说明\”:\“这是一个测试\”}]“}

我希望正文只是JSON,而不是字符串。我该如何实现?


问题答案:

没有必要将 尸体尸体
分开编组HttpResp。而是将Body字段的类型更改为interface{},然后将该字段设置为与json字符串相对的具体类型的任何值,例如[]Article,然后将resp编组一次。

type HttpResp struct{
    Status      int         `json:"status"`
    Description string      `json:"description"`
    Body        interface{} `json:"body"`
}

其余的…

package main

import (
    "encoding/json"
    "net/http"
    "log"
)

type Article struct{
    Id          string  `json:"id"`
    Title       string  `json:"title"`
    Body        string  `json:"body"`
    Description string  `json:"description"`
}

func AllArticles(w http.ResponseWriter, r *http.Request){
    log.Print("/articles - GET")
    db := connect()
    defer db.Close()

    var articles []Article
    results, err := db.Query("SELECT * FROM Articles")

    if err != nil{
        log.Print(err)
        return
    }

    for results.Next(){
        var article Article
        err = results.Scan(&article.Title, &article.Description, &article.Body, &article.Id)

        if err != nil{
            serr, _ := json.Marshal(err)
            json.NewEncoder(w).Encode(HttpResp{Status: 500, Description: "Failed to retrieve all articles", Body: string(serr)})
        }

        articles = append(articles, article)
    }

    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(HttpResp{Status: 200, Body: articles})
}


 类似资料:
  • 问题内容: 请考虑以下表格: 部 员工 编写查询以返回人员总数为4或更多的那些部门的雇员的empname和deptname列。记录应按姓氏的字母顺序返回 这是我的看法: 您将如何对此进行改进? 问题答案: 这比较短,而且执行速度可能也更快 从分组开始。您不需要内部查询中的COUNT。然后,联接两个表只是为了获得名称。 *之所以使用 *INNER JOIN, 是因为一旦计数完成,我们已经知道 员工存

  • 问题内容: 当我对JScience Amount对象使用toString()时,会得到如下结果: 这并不可怕,但我真的希望它输出类似以下内容的内容: 是否有捷径可寻? 编辑: 为了明确起见,我希望找到一种解决方案,该解决方案适用于具有任何类型单位(或至少所有预定义单位)的任何金额,而不仅仅是“ mph”。 问题答案: 尽管它会丢弃错误和单位,但是您可以执行以下操作: 安慰: 附录: 我希望有一个能

  • 问题内容: 当然,在Java中。我正在编写程序并在Windows环境下运行它,但是我需要以Unix格式完成输出(.csv)。任何简单的解决方案?谢谢! 问题答案: 注意:如评论中所述,下面给出的方法在JDK 9+中是无效的。 使用James H.的答案中的方法。 “ Unix格式”是指使用“ \ n”作为行终止符而不是“ \ r \ n”吗?在创建PrintWriter之前,只需设置系统属性即可。

  • 我试图在java中使用Hibernate和TypedQuery。 我试图调用的方法有一个签名 我想像bellow一样调用它,但是用一个真实的实例替换null。 上面的代码经过编译,但显然带有空指针异常。 如果我对擦除的理解是正确的,那么只要我得到类对象的一个实例,这就行了,因为所有泛型类型信息在运行时都会丢失。 是否有任何方法,我可以得到一个类的实例,我可以分配给变量cls,使这个代码将工作?

  • 问题内容: 在我的不和谐机器人中,我有2个命令来赋予和创建角色。它们工作得很好,但是如果角色名称包含空格,那么我有问题。它将第二个单词计入第二个参数,使命令产生错误。 理想情况下,我应该能够执行类似的操作,但会收到“无效用户”错误。我有什么办法可以在角色名称中支持空格?提前致谢! 问题答案: 您有几种选择: 使用角色转换器并要求提及角色: 要求角色用引号引起来: 切换两个参数的位置,以使转换后的用