因此,我正在制作一个Go服务,该服务调用了一个宁静的API,但我无法控制正在调用的API。
我知道Go在NewDecoder-> Decode中有一个不错的内置反序列化器,但是它仅适用于以大写字母开头的结构域(又称公共域)。这引起了一个问题,因为我要使用的JSON看起来像这样:
{
"_next": "someValue",
"data": [{/*a collection of objects*/}],
"message": "success"
}
Run Code Online (Sandbox Code Playgroud)
我将如何映射"_next"?
我写了这段代码.当我运行它时,我无法弄清楚为什么它会给空字段.我试过大写变量.仍然无法正常工作.
package main
import (
"encoding/json"
"fmt"
)
type FirstName struct {
Name1 string
}
type SecondName struct {
Name2 string
}
type Person struct {
Details FirstName
MoreDetails SecondName
}
func main() {
var someGuy Person
var data = []byte(`{"details": {"firstName": "alan"}, "moreDetails": {"surName": "Turing"}}`)
json.Unmarshal(data, &someGuy)
fmt.Println(someGuy)
}
Run Code Online (Sandbox Code Playgroud) 我遇到了数据存储的严重问题,似乎没有任何解决方法。
我正在使用 Google Appengine 数据存储包将投影查询结果拉回到 Appengine 内存中进行操作,这是通过将每个实体表示为结构来完成的,每个结构字段对应于一个属性名称,如下所示:
type Row struct {
Prop1 string
Prop2 int
}
Run Code Online (Sandbox Code Playgroud)
这非常有效,但我已将查询扩展为读取其他包含空格的属性名称。虽然查询运行良好,但它无法将数据拉回结构中,因为它希望将给定值放入具有相同命名约定的结构中,并且我收到此类错误:
datastore: cannot load field "Viewed Registration Page" into a "main.Row": no such struct field
Run Code Online (Sandbox Code Playgroud)
显然Golang无法表示这样的结构体字段。有一个相关类型的字段,但没有明显的方法告诉查询将其放置在那里。
这里最好的解决方案是什么?
干杯
google-app-engine struct go data-structures google-cloud-datastore
我得到的一些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)
}
Run Code Online (Sandbox Code Playgroud)
输出为:
[{Name: Order:Monotremata} {Name: Order:Dasyuromorphia}]
Run Code Online (Sandbox Code Playgroud)
所以在模式中,库移除了空间(来自Na me)并尝试找到键(Name),这显然不存在.有什么建议我可以在这做什么?
Go中可以通过编程方式创建结构类型(即不在编译的源代码中)吗?
我们有一个特殊的用例,其中将通过用户定义的元数据创建类型(因此事先不知道模式/类型),并且每个客户都会有所不同。然后,我们需要为这些服务自动生成REST服务,并将其保留在NoSQL后端中。我们还需要为每个字段定义不同的动态验证器(例如,必填项,正则表达式,最大/最小大小,最大/最小值,对另一个类型实例的引用等)。
我想知道在Go中是否可以进行类似的操作?
编辑1:
例如
从JSON中的前端
For customer 1:
{
"id":1,
"patientid":1,
"name":"test1",
"height":"160",
"weight":"70",
"temp":"98"
}
For customer 2:
{
"id":2,
"patientid":1,
"name":"test1",
"height":"160",
"weight":"70"
}
For customer 3
may be different new fields will add
Run Code Online (Sandbox Code Playgroud)
后端
// For One customer need to have these fields
type Vitalsigns struct {
ID int64 `datastore:"-"`
PatientID int64 `json:"patientid,omitempty"`
Name string `json:"name,omitempty"`
Height string `json:"height,omitempty"`
Weight string `json:"weight,omitempty"`
Temp string `json:"temp,omitempty"`
}
// Another need to have these fields
type Vitalsigns struct …Run Code Online (Sandbox Code Playgroud) 我有这个XML阅读器结构:
type Recurlyservers struct {
XMLName xml.Name `xml:"servers"`
Version string `xml: "version,attr"`
Svs []server `xml: "server"`
Description string `xml:",innerxml"`
}
Run Code Online (Sandbox Code Playgroud)
这样做有什么意思xml:"servers"或xml: "version,attr"?我不知道这是什么.我想在谷歌搜索,但我不知道它的名字.它是什么?如果没有这个,我可以使用标准结构吗?因为没有这个,XML读取不起作用.
type MyRequest struct {
email string `json:"email" valid:"email,required"`
}
Run Code Online (Sandbox Code Playgroud)
json用于(un)编组JSON结构,但是valid用于什么?
我是初学者并试图解组以下json字符串
[{
"db": {
"url": "mongodb://localhost",
"port": "27000",
"uname": "",
"pass": "",
"authdb": "",
"replicas": [
{
"rs01": {
"url":"mongodb://localhost",
"port": "27001",
"uname": "",
"pass": "",
"authdb": ""
}
},
{
"rs02": {
"url":"mongodb://localhost",
"port": "27002",
"uname": "",
"pass": "",
"authdb": ""
}
}
]
}
}]
Run Code Online (Sandbox Code Playgroud)
这是结构
type DBS struct {
URL string `json:url`
Port string `json:port`
Uname string `json:uname`
Pass string `json:pass`
Authdb string `json:authdb`
Replicas []DBS `json:replicas`
}
Run Code Online (Sandbox Code Playgroud)
这是功能
func loadConfigs() []DBS {
var config []DBS
raw, …Run Code Online (Sandbox Code Playgroud) 我是第一次使用 GO 并且正在设置一个小示例 API。在尝试从我创建的结构返回 JSON 对象时,当我向字段添加结构标记时出现此错误:
“字段标记必须是字符串”和“无效字符文字(多个字符)”。
这是我的代码分解。我在这里缺少什么?
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"github.com/gorilla/mux"
)
func main() {
router := mux.NewRouter()
router.HandleFunc("/demo/v1/version", getVersion).Methods("GET")
log.Fatal(http.ListenAndServe(":8080", router))
}
func getVersion(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
version := Version{ID: "demo", Version: "1.0.0", Sha: "some hash...."}
var myJSON, err = json.Marshal(version)
json.NewEncoder(w).Encode(myJSON)
}
type Version struct {
//ERRORS on these 3 lines:
ID string 'json:"id"'
Version string 'json:"version, omitempty"'
Sha string 'json:"sha"'
}
Run Code Online (Sandbox Code Playgroud)