【问题标题】:Iterate JSON & takeout each value separately迭代 JSON 并分别取出每个值
【发布时间】:2019-03-15 18:42:42
【问题描述】:

我在 console.log 中得到了预期的结果,现在我想在 span 中显示结果 如下 预定
司机:
乘客:

活跃
司机:
乘客:

我的工作代码是

$(document).ready(function() {
    $.ajax({
        asyn: true,
        crossDomain: true,
        url: "apilink",
        dataType: 'JSON',
        callback: 'callback',
        type: 'GET',
        success: function(result) {
            //console.log(result)
            var obj = jQuery.parseJSON(JSON.stringify(result))
            for (var propertyName in obj) {
                console.log(propertyName + ":");
                for (var internalPropertyName in obj[propertyName]) {
                    console.log(internalPropertyName + ":" + obj[propertyName][internalPropertyName]);
                }
            }

        }
    });

【问题讨论】:

  • 你试过什么?您是否有特定问题或只是想找人为您编写代码?
  • 你有固定的json还是动态的结构?还添加您尝试过的解决方案,以便我们可以指出其中的问题
  • 请检查,我已经尝试过上面的代码
  • @VishalFreelancer :您可以保留现有对象,并保留新变量以进行计数,并在您的 ui/显示页面中将其用作 stackoverflow.com/a/51893734/4225796

标签: jquery json


【解决方案1】:

如果你想自动化任务,你可以像下面我的例子那样循环键,

    var obj = {
        "scheduled": {
            "driver_count": 1,
            "passenger_count": 5
        },
        "active": {
            "driver_count": 1,
            "passenger_count": 2
        }
    }
    
    var keys = Object.keys(obj);
    
    keys.forEach(function(key){
    	var innerKeys = Object.keys(obj[key]);

        var s = key;
        s = s[0].toUpperCase() + s.slice(1);
    	var head = s + ": ";
      
      innerKeys.forEach(function(key, idx){
      	head+= (idx > 0 ? "+" : "") + key.split("_")[0];
      });
      
      innerKeys.forEach(function(innerKey){
        var s = innerKey.split("_")[0];
        s = s[0].toUpperCase() + s.slice(1);
      	head+="\n" + s + ": " + obj[key][innerKey]; 
      })
      
      
      console.log(head)
    })

这将为您生成密钥并获取值以及生成您所要求的确切输出。

【讨论】:

  • 如何在 html 元素中显示每个值,例如 Scheduled Driver:Passenger:Active Driver:Passenger:
【解决方案2】:

您可以创建一个函数并在您的 ajax 响应中调用此函数。 这将为您添加新的密钥,如“scheduled_count”和“active_count”

你可以使用

$(document).ready(function() {
    $.ajax({
        asyn: true,
        crossDomain: true,
        url: "http://10.26.32.11/api/rating-service/rate/current/gettrips",
        dataType: 'JSON',
        callback: 'callback',
        type: 'GET',
        success: function(result) {
            //console.log(result)
            var obj = jQuery.parseJSON(JSON.stringify(result))
             makeFlatModel(obj);
        }
    });

// For testing no need to add in code
jsobj  = {
"scheduled": {
    "driver_count": 1,
    "passenger_count": 1
},
"active": {
    "driver_count": 0,
    "passenger_count": 0
}}
makeFlatModel(jsobj );
console.log(jsobj );
// For testing code ends

// add this function in your code


function makeFlatModel(jsonObject){
	var sum=0;
	for(var propertyName in jsonObject){
		if(typeof jsonObject[propertyName] =='object'){
			jsonObject[propertyName+"_count"] = makeFlatModel(jsonObject[propertyName]);
		}else{
			sum+= jsonObject[propertyName];
		}
	} 
  return sum;

}

输出

【讨论】:

  • 我已经用我当前的工作代码编辑了我的问题,它在 console.log 中显示了预期的结果,现在我想在 html 元素中显示每个 vale。请帮我解决这个问题。
  • @VishalFreelancer 在您的代码中,您可以调用“obj = makeFlatModel(obj);” instate for 循环,因此您将获得带有“scheduled_count”和“active_count”的对象,您可以在您的 html 上使用此变量,因为您计划使用计划或活动
  • @VishalFreelancer : 你知道如何在 html 中显示对象值吗?
  • @VishalFreelancer :更新了答案,现在你的对象有更多的字段可以用来在 html 中显示
  • @VishalFreelancer 我已经更新了我的答案,并且在 makeFlatModel(obj ); obj 字段包含另外两个字段,因此您可以在 html 中显示此值。那你的具体问题是什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 2011-10-31
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多