我有一系列数据要输入数据库.输入数据的用户界面不适合批量输入,所以我试图制定一个等效的命令行.当我在chrome中检查UI的网络请求时,我看到了一个json对象的PUT请求.当我尝试复制请求时
curl -H 'Accept: application/json' -X PUT '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
curl:(3)[globbing]在pos X不支持嵌套大括号
其中X是第一个"["的字符位置.
我如何PUT包含数组的json对象?
我正在使用colander验证(和反序列化json数据)输入到某些Web服务.
我想在漏勺模式中添加一个规则来捕获一个空列表,但我无法弄清楚如何做到这一点.
现在我有以下示例,演示了对f()具有两组不同数据的函数的调用.我希望后者colander.Invalid因为空events列表而触发异常
import colander
def f(data):
class EventList(colander.SequenceSchema):
list_item = colander.SchemaNode(colander.Int())
class Schema(colander.MappingSchema):
txt = colander.SchemaNode(colander.String())
user = colander.SchemaNode(colander.String())
events = EventList()
try:
good_data = Schema().deserialize(data)
print 'looks good'
except colander.Invalid as e:
print "man, your data suck"
good_data = {'txt' : 'BINGO',
'user' : 'mogul',
'events' : [11, 22, 33]}
f(good_data)
bad_data = {'txt' : 'BOOM',
'user' : 'mogul',
'events' : []}
f(bad_data)
Run Code Online (Sandbox Code Playgroud)
建议?
在 Python3 中,我正在加载一段 YAML。加载程序尝试猜测正确的类型,但我不太满意。我希望字典键始终是字符串。
首先要演示一段简约的 YAML,可以轻松直接粘贴到 Python 解释器中。不用说,我的现实世界数据要复杂得多。
txt = """
---
one: 1
2: two
"""
Run Code Online (Sandbox Code Playgroud)
首先是“常规”负载:
yaml.load(txt)
{2: 'two', 'one': 1}
Run Code Online (Sandbox Code Playgroud)
请注意键2如何作为数字而不是字符串加载。然后让我们尝试一些不同的东西:
yaml.load(txt, Loader=yaml.BaseLoader)
{'2': 'two', 'one': '1'}
Run Code Online (Sandbox Code Playgroud)
现在一切都变成了字符串。不幸的是还有1,作为一个值,我需要作为一个数字。
因此,我可以将键和值都强制为字符串,也可以不将其强制为字符串。
我当然可以制作一个后处理器来遍历加载的数据并将其复制到一个新变量,并将 dict 键强制为字符串,但我想它可以在 YAML 加载器中做得更优雅。
建议?
我在 bash 脚本上遇到了一个问题,即: - 在系统启动时或按需由“root”执行 - 运行具有“stefano”权限的脚本 - 如果由“root”或“/”触发,则重定向日志文件上的输出dev/stdout" 如果由 "stefano" 触发:
#!/bin/bash
[ "$1" == "log" ] && log="$2" || log="/dev/stdout"
if [ "`/usr/bin/whoami`" != "stefano" ]; then
echo "You are not allowed"
exit 9
fi
runuser -s /bin/bash stefano -c "echo I am Stefano >> $log"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我得到一个 bash: /dev/stdout: Permission denied
如果命令由 root 触发,为什么用户“stefano”无法在 /dev/stdout 上写入?
显然作为stefano> echo "I am Stefano" >> /dev/stdout没有得到任何错误。
在此先感谢您的帮助!Stefano, 米兰, 意大利
我试图避免临时变量。但我无法弄清楚正确的语法:
typedef struct {
int n;
int *ptr;
} i_cant_change_this_typedef;
i_cant_change_this_typedef foo;
i_cant_change_this_typedef bar;
int main(void) {
foo.n = 123;
int tmp[] = {0x01,0x02,0x03};
foo.ptr = tmp;
bar.n = 321;
/* can this be done somehow? */
/* bar.ptr = {0x03,0x02,0x01};*/
}
Run Code Online (Sandbox Code Playgroud)
必须制作中间 tmp 变量让我很烦恼。底部的注释行应该显示我正在尝试做什么。
能不能做,怎么做?
是的,我在这里使用的是常规的 gcc/g++。
更新:我知道我应该提到我更喜欢在 C 和 C++ 中同样有效的解决方案。它将用于应避免过于复杂的动态分配的嵌入式解决方案中。