将JSON查询字符串解析为JSON对象

右旋

API的查询结构如下:

../myapi/products?_q=genre,retail_price&_a=g,p&p.gt=10&p.lt=20&g.eq=POP

有两个数组:_q列出查询参数,_a列出相应的别名。因此,p->零售价格和g->类型

我可以将其解析为:

{$and : [ genre: { '$eq': 'POP' }, retail_price: { '$gt': '10' }, retail_price: { '$lt': '20' } ]}

快高兴了。但是这种方法有两个问题:1.'$ eq'等代替$ eq等2.数字值现在是字符串'10'

我认为(2)令人讨厌。由于服务器无法知道类型(也许应该是“ 10”而不是10)。

因此,我想尝试另一种方法。并将其全部解析为queryString,然后使用JSON.parse()进行转换

首先,我放入一些查询字符串并在外壳中尝试:

db.products.find({$and: [{genre: { $eq: 'ROC'}}, {retail_price: {$gt:7}}, {retail_price: {$lt:10}}]})

奇迹般有效。

然后我尝试了这个:

var queryStr = "{$and: [{genre: { $eq: 'ROC'}}, {retail_price: {$gt:7}}, {retail_price: {$lt:10}}]}";

和:(产品为猫鼬模型)

Product.find(JSON.parse(queryStr), function(err, product) {
    if (err)
        res.send(err);

        res.json(product);
    });

令我惊讶的是,它根本没有用。

也做

console.log(JSON.stringify(JSON.parse(queryStr)));

不将输出写入控制台。

这是怎么回事

杰森·库斯特

首先是queryStr无效的JSON您拥有的是看起来像对象的字符串。但是您可能会问“不是JSON吗?”。简短的回答:不。长答案:由于JSON是一种轻量级的数据交换格式,因此它必须能够被多种语言(不仅仅是Javascript)读取。因此,引号是使之成为可能的要求:

var json = '{"foo": true, "bar": 123}';
var str = '{foo: true, bar: 123}';
console.log(JSON.parse(json)); // Object {foo: true, bar: 123}
console.log(JSON.parse(str)); // SyntaxError: Unexpected token f

因此,您可以将查询对象字符串化为JSON,然后在将其传递给mongoose方法之前进行解析:

// On the client
var queryJSON = JSON.stringify({$and: [{genre: { $eq: 'ROC'}}, {retail_price: {$gt:7}}, {retail_price: {$lt:10}}]});
// On the server
var query = JSON.parse(queryJSON); // Object

也就是说,回到您最初的两个问题:

  1. 引用的密钥名称:它们在这方面的影响为零,因此完全不应该成为问题。
  2. 值类型不正确:看起来您已经有一个将查询格式化为正确对象的过程,以便可以Number将字符串强制为数字值。(例如Number('10') // 10

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将JSON查询字符串解析为JSON对象

来自分类Dev

使用linq将json字符串解析为对象

来自分类Dev

将JSON对象解析为Java中的字符串

来自分类Dev

将字符串转换或解析为JSON对象

来自分类Dev

将 JSON 从字符串解析为对象

来自分类Dev

Nodejs - 将字符串解析为 JSON 对象

来自分类Dev

将字符串解析为JSON

来自分类Dev

将字符串解析为JSON

来自分类Dev

将字符串解析为JSON

来自分类Dev

将字符串解析为JSON

来自分类Dev

Gson 无法将位于 json 对象中的 json 数组字符串解析为 JsonArray

来自分类Dev

如何使用继承/多态性将JSON字符串解析为C#对象?

来自分类Dev

将JSON字符串解析为对象数组Objective C

来自分类Dev

将包含多个json对象的字符串解析为更方便的内容

来自分类Dev

android,gson无法将json字符串解析为java对象

来自分类Dev

将NSDictionary的JSON字符串解析为对象数组Object C

来自分类Dev

android,gson无法将json字符串解析为java对象

来自分类Dev

将未标记的 JSON 字符串解析为 java 对象

来自分类Dev

使用 Jackson 将 Json 字符串解析为 Kotlin 对象抛出 InvalidDefinitionException

来自分类Dev

将 JSON 字符串解析为具有精确值的 javascript 对象

来自分类Dev

将字符串解析为对象

来自分类Dev

将字符串解析为对象

来自分类Dev

将JSON字符串解析为C#中的JSON对象,而无需编写额外的对象类

来自分类Dev

将JSON中的大数字解析为字符串

来自分类Dev

JSON字段-将字符串解析为Int

来自分类Dev

将Mongo更新JSON字符串解析为DBObject

来自分类Dev

C#无法将JSON解析为字符串

来自分类Dev

JSON将Number解析为字符串

来自分类Dev

Python-将字符串解析为json

Related 相关文章

热门标签

归档