热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Angular/Javascript模块类似于Java中的gson?-Angular/JavascriptmodulesimilartogsoninJava?

IwasworkingontheAndroidandfoundGsonasahandyutilitytoconvertJSONobjectsintoJavaobj

I was working on the Android and found Gson as a handy utility to convert JSON objects into Java objects. Since I am a big fan of Object Oriented architecture, I am trying to optimize angular code using OO architecture. Every object is mapped to a factory. I am wondering if there is any plugin in Javascript or angular that can convert JSON to Angular Objects. e.g. If I have a card factory in Angular

我正在使用Android,并发现Gson是一个将JSON对象转换为Java对象的便捷工具。由于我是面向对象架构的忠实粉丝,我正在尝试使用OO架构优化角度代码。每个对象都映射到一个工厂。我想知道是否有任何Javascript或angular中的插件可以将JSON转换为Angular对象。例如如果我在Angular有一家卡片工厂

app.factory('Card', [function() {
    function Card(cardData) {
      if (cardData) {
        this.setData(cardData);
      }else{
        this.new();
      }
    };


   Card.prototype = {

     new: function(){
      var cardData = {
        title: 'Add your recommendations',
     }
     this.setData(cardData);
   }
  };
  return Card;
}]);

and I am getting JSON data like this

我正在获取这样的JSON数据

{card: {title: 'demo_title'}}

it should map it automatically like GSON does. I can create a new module to do that, just wondering if someone already did that.

它应该像GSON一样自动映射。我可以创建一个新模块来做到这一点,只是想知道是否有人已经这样做了。

1 个解决方案

#1


0  

You don't need to create something to work like GSON because JSON has native support on Javascript via JSON.parse("{\"card\": {\"title\": 'demo_title'}}" which will produce a Javascript object like {card: {title: 'demo_title'}}. In addition, the angularjs' $http service, parses your JSON internally, so you don't even have to think about it.

你不需要像GSON一样创建一些东西,因为JSON通过JSON.parse(“{\”card \“:{\”title \“:'demo_title'}}”对Javascript有本机支持,这将产生一个Javascript对象如{card:{title:'demo_title'}}。此外,angularjs'$ http服务在内部解析你的JSON,所以你甚至不必考虑它。

However, what I think you are looking for, is an approach for using data from the server and instantiate a class from the parsed JSON. A regular approach for that, is using a class which in its constructor you provide the raw object and merge it into its properties. It's convenient to use angular.extend() but you can do it manually if you prefer.

但是,我认为您正在寻找的是一种使用来自服务器的数据并从解析的JSON中实例化一个类的方法。一种常规的方法是使用一个类,在它的构造函数中,您提供原始对象并将其合并到其属性中。使用angular.extend()很方便,但如果您愿意,可以手动执行。

It'd be something like this:

它是这样的:

function Card(data) {
    angular.extend(this, data);
}

var myCard = new Card({ title: 'demo_title' });

Furthermore, if you want to keep a more reliable model, you can declare a class to work as the object to hold the data, and add methods to retrieve and post data to the server.

此外,如果要保持更可靠的模型,可以声明一个类作为保存数据的对象,并添加检索数据并将数据发布到服务器的方法。

angular.module('app')
  .factory('Card', ['$http', function CardFactory($http) {

    var Card = function (data) {
      angular.extend(this, data);
    }

    Card.get = function (id) {
      return $http.get('https://my.api/cards/' + id).then(function(response) {
        return new Card(response.data.card);
      });
    };

    Card.all = function () {
      return $http.get('https://my.api/cards').then(function (res) {
        return res.data.cards.map(function (x) {
          return new Card(x);
        });
      });
    };

    Card.prototype.create = function () {
      var card = this;

      return $http.post('https://my.api/cards', card).then(function(response) {
        card.id = response.data.card.id;
        return card;
      });
    }

    return Card;
  }]);

So that you can use it like this:

所以你可以像这样使用它:

angular.module('app')
  .controller('CardCtrl', ['Card', function CardsCtrl(Card) {
    // get a card
    this.card = Card.get(1);

    // create a new card
    this.newCard = function newCard() {
      var card = new Card({ title: 'new_card' });
      card.create();
    };
  });

Ref.: Recommended way of getting data from the server

参考:从服务器获取数据的推荐方法


推荐阅读
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文详细介绍了解决全栈跨域问题的方法及步骤,包括添加权限、设置Access-Control-Allow-Origin、白名单等。通过这些操作,可以实现在不同服务器上的数据访问,并解决后台报错问题。同时,还提供了解决second页面访问数据的方法。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
author-avatar
灬我的独一小姐灬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有