【问题标题】:How to parse a Json array with values "id": 1.1.1.1如何解析值为“id”的 Json 数组:1.1.1.1
【发布时间】:2016-06-22 04:10:56
【问题描述】:

我有一个 $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 应用程序,它给了我正确的响应,但采用上述格式。

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

【问题讨论】:

  • 服务器代码中bslRef是什么类型?还有$scope.baselines 是字符串还是对象?如果是对象,则无需JSON.stringify
  • $scope.baselines 是一个对象。它的格式为 [{"id":27885,"bslRef":acms.2016.04.00,"size":0,"isDefault":true,"baselineDate":null,"parentRef":null,"activities" :null,"default":true,"open":true,"daily":false}]
  • bslref 是服务器代码中的对象类型。

标签: angularjs json http-get spring-restcontroller


【解决方案1】:

其中一种解决方案是自己转换响应对象,使用函数在响应返回时处理它...

这可以在 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 请求的。如果您想在所有地方使用它,请尝试创建服务或工厂。

谢谢,HTH

【讨论】:

    【解决方案2】:

    问题解决了。实际上,在 Baseline 的 pojo 类中,我添加了以下 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 方法。 在这里,我不必解析我的角度代码。感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 2021-12-29
      相关资源
      最近更新 更多