首页 > 解决方案 > 当我的键是随机的时,如何按值组织 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() 也不起作用。请帮我!

标签: javascriptjsonsorting

解决方案


在您的成功功能上,您可以操纵结果。喜欢:

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 函数中。


推荐阅读