如何用值 "id" 解析 Json 数组:1.1.1.1

How to parse a Json array with values "id": 1.1.1.1

我有一个应该调用本地服务器的 $http get 方法。我通过邮递员从我的服务器得到正确的回应。 以下是我的 Json 价值观:

[{"id":27885,"bslRef":acms.2016.04.00,"size":0,"isDefault":true,"baselineDate":null,"parentRef":null,"activities":null,"default":true,"open":true,"daily":false}]

因为我感兴趣的值 "bslRef":acms.2016.04.00 没有包含在 json 标签 [""] 中。

这就是我遇到解析错误的原因。 这是我从 jsonlint.

得到的错误
Error: Parse error on line 3:
...: 27885, "bslRef": acms .2016 .04 .00,
----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined'

以下是我的 angularjs 控制器代码:

$http.get('/baseline/getBaseline?', {params: {
                       currProject: $scope.selectedProject}})
                   .success(function(data) {

                       $scope.baselines=JSON.stringify(data);
                   })
                   .error(function(data) {
                       alert("failure");
                   });

我试过 parse() 方法和 stringify() 方法,但没有用。

我的服务器端应用程序是一个 spring-mvc rest 应用程序,它给我正确的响应,但采用上述格式。

请有人帮助我通过 angular 方法解析它,或者从我的 spring 控制器获取 json 类型的响应。 TIA。

其中一个解决方案是自己转换响应对象,使用一个函数来处理响应 returns...

这可以在 angular 文档中找到。

$http({
 url: '...',
 method: 'GET',
 //here you get the unparserd response ...
 transformResponse: appendTransform($http.defaults.transformResponse,  

    //you data response comes here ..which you can handle customly
    function(data) {
      //perform modifications & get data
      $scope.baselines = doTransform(data);
    })
});

然后您可以根据需要将数据绑定到Html DOM。这个是给单机的 get request.If 你想在所有地方都用它,尝试创建一个服务或工厂。

谢谢,HTH

问题已解决。实际上,在我的基线的 pojo class 中,我添加了以下 Json 注释。

private long id;
@JsonSerialize(as = BaselineRef.class)
@JsonRawValue
private BaselineRef bslRef;
private int size;
@JsonProperty
private boolean isDefault = false;
private boolean isOpen = true;
private boolean isDaily = false;
private String baselineDate;
private BaselineRef parentRef;
private Collection<String> activities;

因此在检索时我得到了以下类型的响应。

[{"id":27885,"bslRef":acms.2016.04.00,"size":0,"isDefault":true,"baselineDate":null,"parentRef":null,"activities":null,"default":true,"open":true,"daily":false}].

一旦我删除了注释,现在我得到了

 `[{"id":27885,"bslRef":{"bslName":"2016.04.00","projectName":"acms","overrides":false},"size":0,"baselineDate":null,"parentRef":null,"activities":null,"default":true,"open":true,"daily":false}]` 

这是我想要的回复。在这里我确保 BaselineRef 有一个 toString 方法。 在这里我不必解析我的 angular 代码。感谢大家的帮助。