有没有办法对JSON对象进行排序而不重新排序其中的数组?

时间:2017-03-16 05:42:30

标签: json sorting

我想在不重新排序数组的情况下对JSON进行排序。 JSON看起来像:

{  
   "objectid":"589a399724bd631d0424265a",
   "mappingerrors":[  

   ],
   "timestamp":"UCT",
   "models":[  
      {  
         "models4":"589a399724bd631d01234567",
         "models1":"AAAA",
         "models3":"244",
         "models5":"7ee92c958a051e66f19d6561575c5642",
         "models2":"01945610",
         "values":[  
            {  
               "11":"YYYY",
               "1":"A",
               "9":"B",
               "5":"XXXX",
               "3":2,
               "10":239.804,
               "6":"C",
               "2":"D",
               "4":"2017-02-03T21:53Z",
               "8":"MSFT",
               "7":"TTTT"
            }
         ],
         "models6":"2017-02-03T21:53Z"
      }
   ]
}

现在我想对此进行排序:

{  
   "mappingerrors":[  

   ],
   "models":[  
      {  
         "models1":"AAAA",
         "models2":"01945610",
         "models3":"244",
         "models4":"589a399724bd631d01234567",
         "models5":"7ee92c958a051e66f19d6561575c5642",
         "models6":"2017-02-03T21:53Z",
         "values":[  
            {  
               "1":"A",
               "2":"D",
               "3":"2",
               "4":"2017-02-03T21:53Z",
               "5":"XXXX",
               "6":"C",
               "7":"TTTT",
               "8":"MSFT",
               "9":"B",
               "10":"239.804",
               "11":"YYYY"
            }
         ]
      }
   ],
   "objectid":"589a399724bd631d0424265a",
   "timestamp":"UCT"
}

我尝试使用以下代码,但它没有给出适当的结果。

function sortObject(jsonObject) {
        var sorted = {},
            key, a = [];

        for (key in jsonObject) {
            if (jsonObject.hasOwnProperty(key)) {
                a.push(key);
            }
        }

        a.sort();

        for (key = 0; key < a.length; key++) {
            sorted[a[key]] = jsonObject[a[key]];
        }
        return sorted;
    }

有没有办法通过忽略JSON对象中的数组来做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码对数组进行排序。

&#13;
&#13;
<form name="addUserForm" novalidate>
            <div class="modal-body">
                <div class="row">
                    <div class="col-sm-12">
                        <div class="form-group">
                            <label for="email">Email:</label>
                            <input class="form-control" type="email" id="email" name="email" ng-model="addUserFormData.email" ng-pattern="^\S+@(([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6})$" required placeholder="xxx@xxx.com">
                            <span class="error_text" ng-show="addUserForm.email.$error.required && addUserForm.email.$touched">Required</span>
                            <span class="error_text" ng-show="!addUserForm.email.$error.required && addUserForm.email.$error.email && addUserForm.email.$dirty">Invalid Email</span>
                        </div>
                        <div class="form-group">
                            <label for="username">Customer Name:</label>
                            <input class="form-control" type="text" id="username" name="username" ng-model="addUserFormData.username" ng-pattern="/^[\w -]*$/" ng-minlength="2" ng-maxlength="20" maxlength="20" required  placeholder="Customer Name">
                            <span class="error_text" ng-show="addUserForm.username.$error.required && addUserForm.username.$touched">required</span> 
                            <span class="error_text" ng-show="!addUserForm.username.$error.minLength && !addUserForm.username.$error.maxLength && addUserForm.username.$error.pattern && addUserForm.username.$dirty">Name must contain letters and space only.</span>                               
                            <span class="error_text" ng-show="!addUserForm.username.$error.required && (addUserForm.username.$error.minlength || addUserForm.username.$error.maxlength) && addUserForm.username.$dirty">Name must be between 2 and 20 characters.</span>
                        </div>                            
                        <div class="form-group">
                            <label>Role:</label><br />
                            <label class="radio-inline"><input type="radio" name="role" ng-model="addUserFormData.roleAdmin" ng-required="addUserFormData.roleAdmin || addUserFormData.roleUser">Admin</label>
                            <label class="radio-inline"><input type="radio" name="role" ng-model="addUserFormData.roleUser" ng-required="addUserFormData.roleAdmin || addUserFormData.roleUser">User</label>
                        </div>
                        <div class="form-group">
                            <label>Accessable To:</label>
                            <div class="clearfix"><!-- donot delete this -- clear both property --></div>
                            <div class="access_checkbox">
                                <label class="checkbox-inline">
                                    <input type="checkbox" ng-model="addUserFormData.cStoreAnalytics" ng-required="addUserFormData.cStoreAnalytics || addUserFormData.cameraAnalytics || addUserFormData.wifiAnalytics">C Store Analytics
                                </label>
                                <input class="form-control mar_bot_5" type="text" ng-disabled="!addUserFormData.cStoreAnalytics" placeholder="Username">
                                <input class="form-control" type="password" ng-disabled="!addUserFormData.cStoreAnalytics" placeholder="Password">
                            </div>
                            <div class="access_checkbox">
                                <label class="checkbox-inline">
                                    <input type="checkbox" ng-model="addUserFormData.cameraAnalytics" ng-required="addUserFormData.cStoreAnalytics || addUserFormData.cameraAnalytics || addUserFormData.wifiAnalytics" >Camera Analytics
                                </label>
                                <input class="form-control mar_bot_5" type="text" ng-disabled="!addUserFormData.cameraAnalytics" placeholder="Token Id">

                            </div>
                            <div class="access_checkbox">
                                <label class="checkbox-inline">
                                    <input type="checkbox" ng-model="addUserFormData.wifiAnalytics" ng-required="addUserFormData.cStoreAnalytics || addUserFormData.cameraAnalytics || addUserFormData.wifiAnalytics" >Wifi Analytics
                                </label>
                                <input class="form-control mar_bot_5" type="text" ng-disabled="!addUserFormData.wifiAnalytics" placeholder="Username">
                                <input class="form-control" type="password" ng-disabled="!addUserFormData.wifiAnalytics" placeholder="Password">
                            </div>
                            <div class="clearfix"><!-- donot delete this -- clear both property --></div>
                            <p class="note_text">Make sure you have entered correct username and password</p>
                        </div>
                        <div class="form-group">
                            <label>Password:</label>
                            <input class="form-control" type="password" placeholder="Password">
                        </div>
                        <div class="form-group">
                            <label>Confirm password:</label>
                            <input class="form-control" type="password" placeholder="Confirm password">
                        </div>
                    </div>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
                <button type="submit" ng-disabled="addUserForm.$invalid" ng-click="addUser()" class="btn redcolor_btn"> <!--data-dismiss="modal"-->Add</button>
            </div>
        </form>
&#13;
&#13;
&#13;

您可以运行代码段并验证。

希望这有帮助!