【问题标题】:Convert string definition to javascript object将字符串定义转换为 javascript 对象
【发布时间】:2017-04-19 18:06:52
【问题描述】:

将 API 返回的字符串转换为 javascript 对象的最佳方法是什么。这是 aspnet 核心中的 ModelState 验证的结果。

字符串看起来像这样 {"cars[2].color", "blue"}

我需要将“cars[2].color”转换为对象

 {
   cars: [
      {},
      {},
      {
      color: "blue"
     }
   ]
 }

【问题讨论】:

  • 如果返回的是json,你不能简单地通过data.cars[2].color访问它吗?假设 data 是您的函数参数的名称 (function (data))。
  • 是否需要将路径转换为对象?还是对象的json字符串?转换路径有很多假设...

标签: javascript json asp.net-core-mvc


【解决方案1】:

根据您用于获取 API 的框架,一般来说它应该足够聪明,可以自动为您完成,特别是当 aspnet 中的 API 在响应中将内容类型设置为 application/json 时。例如,如果使用 jquery:

$.ajax({
    url:'/api/v1/cars',
    type:'get',
    dataType: 'json', //Optional, generally speaking
    success: function(data) {
        console.log(data); // This will be an object
    }
});

一般来说,如果你想将一些 json 文本转换为 javascript 中的对象,你可以使用原生 JSON.parse 方法:

var jsonObject = JSON.parse("{
  cars: [
      {},
      {},
      {color: "blue"}
    ]
  }"); //Returns an object

【讨论】:

    【解决方案2】:

    如果您尝试解析选择器路径,则可以将段转换为数组:

    function parsePath(string) {
    	var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g
    	
    	var result = []
    	string.replace(rePropName, function(match, number, quote, string) {
    		result.push(quote ? string.replace(/\\(\\)?/g, '$1') : (number || match));
    	});
    	
    	return result;
    }

    虽然不能确定每个段是数组还是对象,但不能确定

    【讨论】:

      【解决方案3】:

      var jsonStr = '{"cars":[{},{},{"color":"blue"}]}';
      
      var jsonObj = JSON.parse(jsonStr);
      
      console.log(jsonObj.cars[2]); // Object {color: "blue"}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-02
        • 2016-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-16
        • 1970-01-01
        相关资源
        最近更新 更多