为了账号安全,请及时绑定邮箱和手机立即绑定

将复杂的 JSON 解析为 goweb REST Create() 函数

将复杂的 JSON 解析为 goweb REST Create() 函数

Go
墨色风雨 2021-06-08 17:12:28
对于一个很长的问题,我提前道歉。希望你能忍受我。我正在使用goweb库,并尝试使用示例 Web 应用程序。我一直在尝试修改RESTful 示例代码,它将 a 定义Thing为:type Thing struct {    Id   string    Text string}AThing是通过向 发送HTTP Post带有适当JSON正文的请求来创建的http://localhost:9090/things。这是在Create函数的示例代码中处理的,特别是以下几行:dataMap := data.(map[string]interface{})thing := new(Thing)thing.Id = dataMap["Id"].(string)thing.Text = dataMap["Text"].(string)这一切都很好,我可以运行示例服务器(侦听http://localhost:9090/)并且服务器按预期运行。例如:curl -X POST -H "Content-Type: application/json" -d '{"Id":"TestId","Text":"TestText"}' http://localhost:9090/things没有错误返回,然后我GET是Thing用curl http://localhost:9090/things/TestId它返回{"d":{"Id":"TestId","Text":"TestText"},"s":200}到现在为止还挺好。现在,我想修改Thing类型,并添加自定义ThingText类型,如下所示:type ThingText struct {    Title   string    Body    string}type Thing struct {    Id   string    Text ThingText}这本身不是问题,我可以Create像这样修改函数:thing := new(Thing)thing.Id = dataMap["Id"].(string)thing.Text.Title = dataMap["Title"].(string)thing.Text.Body = dataMap["Body"].(string)并运行前一个curl POST请求,JSON设置为:{"Id":"TestId","Title":"TestTitle","Title":"TestBody"}它返回没有错误。我再次可以GET访问ThingURL,它返回:{"d":{"Id":"TestId","Text":{"Title":"TestTitle","Body":"TestBody"}},"s":200}再一次,到目前为止,很好。现在,我的问题:如何修改Create函数以允许我对其进行POST复杂JSON处理?例如,JSON上面最后返回的字符串包括{"Id":"TestId","Text":{"Title":"TestTitle","Body":"TestBody"}}. 我希望能够POST 精确JSON到端点并Thing创建。我已经按照代码回来了,似乎该data变量的类型Context.RequestData()来自https://github.com/stretchr/goweb/context,而内部Map似乎是Object.Map来自https://github.com/stretchr的类型/stew/,描述为“具有附加有用功能的地图[字符串]接口{}。” 特别是,我注意到“支持点语法来设置深度值”。我不知道如何设置thing.Text.Title = dataMap...语句以便将正确的JSON字段解析为它。除了 中的string类型之外,我似乎无法使用任何其他内容dataMap,如果我尝试这样JSON做,则会出现类似于以下内容的错误: http: panic serving 127.0.0.1:59113: interface conversion: interface is nil, not string再次对这个可笑的长问题表示抱歉。我非常感谢您的阅读,以及您可能需要提供的任何帮助。谢谢!
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信