当密钥是随机的时,如何按值组织JSON?

时间:2020-08-25 10:32:59

标签: javascript json sorting

因此,我在这里陷入了困境,我通过API收到了JSON,需要将其从主要值到次要值组织起来。那是我的问题...看,我所有的键:值每次都会更改,它们不是静态的。

请在下面输入我的代码:

 roles:[
  {
    type:mongoose.Schema.Types.ObjectId,
    ref:"Roles",
    validate: {
      validator: async function(v) {
        return await Roles.findById(v, (err, rec) => rec !== null)
      },
      message: 'Invalid Object ID'
    },
    required:true
  }
],

我的输出是

        <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>

基本上,我从AI收到结果,建议我需要采取什么措施修理PC,但是我需要进行组织,使我首先获得主要价值,然后获得主要价值,然后再获得次要结果(别忘了键和值可以随时更改)。你知道如何进行吗?

已经尝试将其转换为数组并使用sort()方法,但是没有用,因为我在这里的代码map()也没有用。请帮帮我!

2 个答案:

答案 0 :(得分:1)

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

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函数内部。

答案 1 :(得分:0)

您可以使用Array#sort()

    var data = [ // YOUR DATA  ];
    
    data.sort(function (a, b) {
        return a.name.localeCompare(b.name);
    });

`document.write('<tag>' + JSON.stringify(data, 0, 3) + '</tag>')`;