javascript - 当我的键是随机的时,如何按值组织 JSON?
问题描述
所以,我在这里被困在一件事上,我通过 API 收到一个 JSON,需要将它从主要值组织到次要值。那是我的问题...看,我所有的键:值每次都在变化,它们不是静态的。
按照我下面的代码:
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header">
<h3 class="box-title">Serial Number</h3>
</div>
<div class="form-row">
<div class="form-group col-md-3">
<label></label>
<form method="post" action="#">
<div class="input-group input-group-sm">
<input type="text" class="form-control" id="uwipkey">
<span class="input-group-btn">
<button type="button" id="sendPredictRequest"class="btn btn-info btn-flat" >Executar</button>
</span>
</div>
</div>
</div>
<div class="box-footer">
<div >
</div>
<!-- Fim do Formulario com upload Files -->
</div>
<!-- /.box -->
</div>
<!--/.col (right) -->
</div>
<!-- /.row -->
</div>
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header">
<h2 class="box-title">Result</h2>
</div>
<div class="box-body">
<div id="charts"></div>
<div id="charts2">
</div>
</div>
</div>
</div>
</div>
</section>
<!--_*_*_*_*_*_*_*_*_*_*_*_*_*_ FUNCAO SUBMIT FORM _*_*_*_*_*_*_*_*_*_*_*_*_*_-->
<script>
$('#sendPredictRequest').click(function(){
uwip=$('#uwipkey').val()
$.getJSON('http://xx.xx.xx.xxx:8080/predict/' + uwip, function(data){
console.log('success');
var mappedHash = Object.keys( data ).sort(function( a, b ) {
return data[ a ].rank - data[ b ].rank;
}).map(function( sortedKey ) {
return data[ sortedKey ];
});
/*
Tried this as well, but I got the same output
var arrData = [data];
arrData.sort();
*/
$('#charts').html(JSON.stringify(data));
}).fail(function(jqxhr, textStatus, error) {
console.log( "error" );
$('#result').html("error" + error);
})
$.ajax({
method: "POST",
url: "webservices/ws_ai/repair_recomendation.php",
data:{
uwip: uwip
},
beforeSend: function () {
// Para o usuário esperar o final do carregamento da página
$("#charts2").html("<center><img src='pages/qualityMetrics/img/gears.gif' style='width: 100px; height: 100px;'/> Enviando...</center>");
},
success: function (result) {
//console.log(result);
$("#charts2").html(result);
}
})
});
</script>
我的输出是
{"BOOT KILL + MEDIA BUILD":0.08,"MOTHERBOARD":0.92,"WLAN":0.0}
基本上,我从 AI 那里收到一个结果,建议我需要采取什么措施来修复 PC,但我需要先组织给我主要值,然后是第二个主要值,然后是次要结果(不要忘记键并且值可以一直变化)。你知道如何进行吗?
已经尝试将其转换为数组并使用 sort() 方法,但没有用,在我的代码中尝试了 map() 也不起作用。请帮我!
解决方案
在您的成功功能上,您可以操纵结果。喜欢:
success: function (result) {
$("#charts2").html('');
$.each(sortReponse(result), function (key, value) {
$("#charts2").append('<p><span>' + value.key + '</span><span>' + value.value + '</span></p>');
});
}
您可能需要添加排序功能
function sortReponse(data)
{
var sorted = [];
$(data).each(function(k, v) {
for(var key in v) {
sorted.push({key: key, value: v[key]})
}
});
return sorted.sort(function(a, b){
if (a.value < b.value) return -1;
if (a.value > b.value) return 1;
return 0;
});
}
更新:在你的情况下(如果你的意思是这个 api.jquery.com/jQuery.getJSON )尝试在 .done 函数中。
推荐阅读
- pandas - 如何仅在附加关键字的情况下删除某些单词而不删除关键字重复
- php - 如何处理 symfony 形式的额外数据?
- python - ValueError:当提供两个参数时,数组的形状必须为 (N, 4)
- clojure - Re-frame 中的 reg-event-db、reg-event-fx 和 reg-event-ctx 有什么区别?
- bash - bash 脚本 - 打印所有正在运行的 jar 的绝对路径
- c# - ExchangeService 引发“需要代理身份验证”错误
- spring-data - Mongo DB - 如何使用不同的名称作为键而不是属性名称
- ios - 如何为现有应用使用更新的配置文件?
- selenium-webdriver - 如何让黄瓜场景.getName 进入 Zalenium 仪表板?
- android - setOnClickListener() 上的空指针异常