我正在使用Json文件,我正尝试使用下面的
来解析它printf("LEFT:");
// Copy chars bitMessage 0-5 to l 0-5
for(i = 0; i < 6; i++){
l[i] = bitMessage[i];
printf("%c", l[i]);
}
printf("\n");
printf("RIGHT:");
// Copy chars bitMessage 6-11 to r 0-5
for(i = 6; i < 12; i++){
r[i - 6] = bitMessage[i];
printf("%c", r[i - 6]);
}
我的示例文件是:
{“results”:[{“general-info”:{“full-name”:“TELOS MANAGEMENT”,“body”:{“party”:{“xrefs”:{“xref”:[{“ ID “:” 66666 “}]}}}},” _ ID “:” 91002551 “},{” _ ID “:” 222222" , “体”:{ “方”:{ “一般信息”:{“全-name“:”DO REUSE“},”外部参照“:{”xref“:[{”id“:”777777“}]}}}}]}
预期结果:
TELOS MANAGEMENT | 66666
DO REUSE | 777777
传递参数时我在内部遇到问题。它没有逐行传递。它通过完整的线,结果没有按预期进行。请帮助解决问题。
答案 0 :(得分:0)
这是this question更复杂(双重)的情况。
以下适用于我:
cat sample.json |
sed -e 's/"full-name"/\n&/g' |
tail -n+2 |
sed -e 's/"full-name":"\([^"]*\).*{"id":"\([^"]*\).*/\1\|\2/'
答案 1 :(得分:0)
正如@ l0b0所指出的,这种问题最好使用JSON感知工具解决,例如jq。那么,这是一个jq解决方案。
但必须指出的是,样本输入奇怪地不规则,因此要求不是那么清楚。如果JSON更规则,jq解决方案会更简单。
在任何情况下,以下jq过滤器都会产生如下所述的结果:
db.myCollection.aggregate(
[
{ "$graphLookup": {
"from": "myCollection",
"startWith": "$name",
"connectFromField": "name",
"connectToField": "parent",
"as": "descendants"
}},
{ "$match": { "name": "someValue" } },
]
)
GraphLookupOperation graphLookupOperation = GraphLookupOperation.builder() .from(mongoOperations.getCollectionName(MyCollection.class))
.startWith("name")
.connectFrom("name")
.connectTo("parent")
.as("descendants");
MatchOperation matchStage = Aggregation.match(new Criteria("name").is("someValue));
Aggregation aggregation = Aggregation.newAggregation(graphLookupOperation, matchStage);
List<ClassDefinitionDocument> results = mongoOperations.aggregate(aggregation, mongoOperations.getCollectionName(MyCollection.class), MyCollection.class).getMappedResults();
上面的第二行可以简化为:
results