【发布时间】:2021-10-04 10:08:54
【问题描述】:
我正在尝试将我的变量查询作为 Json 对象传递。所以我在网上看到这样做的一种方法是通过JObject.Parse()。我试图这样做,但在调试时我注意到.Parse() 会在变量query 的内容的开头创建一个“{”并在结尾创建一个“}”。所以我尝试删除query 中的第一个“{”和最后一个“}”,但每当我点击JObject.Parse() 行时,它都会抛出一个异常:
从 JsonReader 读取 JObject 时出错。当前 JsonReader 项不是对象:字符串。路径'',第 1 行,位置 6。
然后我尝试在查询后使用代码,但是当我点击包含JObject.Parse() 的下一行时,这仍然会给我同样的错误:
if (query.Length > 2){
query = query.Substring(1, s.Length-2)
}
然后我在网上看到另一种解决此错误的方法是使用以下内容,但它不会删除第一个“{”和最后一个“}”。
query = query.TrimStart(new char[] { '{' }).TrimEnd(new char[] { '}' });
这是我的query 的组成部分,也是我尝试将查询作为 json 对象传递的内容:
var query = "{\"size\": 1000,\"query\": {\"bool\": {\"should\":[ {\"match\": { \"level\": \"Information\" } }, {\"match\": { \"level\": \"Error\" } } ], " +
"\"filter\": [ { \"range\": { \"@timestamp\": { \"gte\": \"2021-07-26T07:58:45.304-05:00\", \"lt\": \"2021-07-26T08:58:45.305-05:00\" } } } ]," +
"\"minimum_should_match\": 1 } } }";
query = query.TrimStart(new char[] { '{' }).TrimEnd(new char[] { '}' });
/* if (query.Length > 2){
query = query.Substring(1, s.Length-2)
} */
var jsonQuery = JObject.Parse(query);
我将如何解决我遇到的.Parse() 在开头和结尾添加额外的 { 的问题。
变量Query 成立:
{"size": 1000,"query": {"bool": {"should":[ {"match": { "level": "Information" } }, {"match": { "level": "Error" } } ], "filter": [ { "range": { "@timestamp": { "gte": "2021-07-26T07:58:45.304-05:00", "lt": "2021-07-26T08:58:45.305-05:00" } } } ],"minimum_should_match": 1 } } }
那么jsonQuery成立:
{{ "size": 1000, "query": { "bool": { "should": [ { "match": { "level": "Information" } }, { "match": { "level": "Error" } } ], "filter": [ { "range": { "@timestamp": { "gte": "2021-07-26T07:58:45.304-05:00", "lt": "2021-07-26T08:58:45.305-05:00" } } } ], "minimum_should_match": 1 } }}}
如果仔细观察,.Parse() 是在开头添加一个 { 并在末尾添加另一个 }。
【问题讨论】:
-
我无法重现该问题。
JObject.Parse(query)在代码示例中定义的字符串正确解析为 JSON 对象。你所说的“额外”{,}是什么意思? JSON 对象必须以左括号开头并以右括号结尾;这就是定义对象的原因。 -
请查看更新后的帖子。但如果你仔细观察,
.Parse()在开头又加了一个 { ,最后又加了一个 }。然后我去jsonformatter.curiousconcept.com/#看看我的json格式是否正确,但这不是因为它添加了一个{和一个}
标签: c# json elasticsearch console-application