首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

常年写 JS,怎样适应 Java ?

  •  
  •   liuxin5959 · 2018-04-06 12:13:49 +08:00 · 6272 次点击
    这是一个创建于 561 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写了几天 Java,发现处理个 JSON 都好麻烦,以前写 JS 完全没过这事,大家是怎样转变过来这种思维的呢?

    第 1 条附言  ·  2018-04-06 12:54:26 +08:00
    才写不到一周,以前用 Node.js 写后台,现在换 Java,发现要学 Spring + Spring MVC + Mybatis + Maven 这一堆东西,心累。。。
    95 回复  |  直到 2018-04-08 20:56:41 +08:00
        1
    congeec   2018-04-06 12:17:05 +08:00 via iPhone
    你才写了几天
        2
    accfcx   2018-04-06 12:23:09 +08:00 via Android
    从 c 到 Java
        3
    lihongjie0209   2018-04-06 12:23:37 +08:00
    HashMap<String,Object> result =
    new ObjectMapper().readValue(JSON_SOURCE, HashMap.class);


    随便在网上找的, 哪里麻烦了
        4
    noe132   2018-04-06 12:23:41 +08:00 via Android
    常年写 js,什么时候 js 能像 java 一样静态类型
        5
    murmur   2018-04-06 12:25:54 +08:00
    你需要一个 idea
        6
    notreami   2018-04-06 12:28:35 +08:00   ♥ 2
    别用 js 的思维套 java,。
    fastjson、jackson、gson。随便一个库,就能解决你纠结的问题。
        7
    lhx2008   2018-04-06 12:29:19 +08:00 via Android   ♥ 4
    以长比短有什么办法?
    常年写 java,转到 js,怎么写多线程?大家是怎么转变思维的呢。
        8
    ray1888   2018-04-06 12:29:50 +08:00 via Android   ♥ 1
    @noe132 试一下 ts ?虽然我没用过
        9
    notreami   2018-04-06 12:31:04 +08:00
    @lihongjie0209 这个有种强行答题的感觉,ObjectMapper 是哪里来的?为什么要转成 Map,而不是直接对象?
        10
    lihongjie0209   2018-04-06 12:32:38 +08:00
    @notreami https://stackoverflow.com/questions/443499/convert-json-to-map 随手复制的, 具体自己看, 只是想说明这种问题根本不存在
        11
    learnshare   2018-04-06 12:33:37 +08:00
    写 Node.js
        12
    xiandao7997   2018-04-06 12:34:31 +08:00 via iPhone
    @noe132 typescript 还行~
        13
    lxy   2018-04-06 12:56:26 +08:00   ♥ 1
    是的,超麻烦,如果要将 Json 完全解析成一个对象(有明确的类型,如 String、Integer、List 之类,而不是 Object ),则需要定义一个与 Json 结构相同的 class。3 楼那种是不完全解析。我写了半年 Java 的确很憋屈,Python 就自由得多。
        14
    grantonzhuang   2018-04-06 12:57:11 +08:00 via Android
    @notreami 然而 js 里面对象就是个 map。。。
        15
    param   2018-04-06 13:00:23 +08:00 via Android
    是超麻烦没错。
        16
    pandago   2018-04-06 13:11:10 +08:00 via iPhone
    多写就习惯了
        17
    honeycomb   2018-04-06 13:18:50 +08:00 via Android   ♥ 1
    @notreami 习惯可以不同,在 Java 里要做 json 反序列化第一个想到的肯定是 Jackson,gson 那些库。强类型的语言多少会有这种麻烦。
        18
    IvanLi127   2018-04-06 14:03:23 +08:00 via Android
    如果不是必须要 java,那么 typescript 了解一下?
        19
    TakWolf   2018-04-06 14:11:43 +08:00   ♥ 1
    常年写 Java,求教怎样适应 JS ?对象里面有啥都不知道,点也点不出来(滑稽)


    根本原因是静态语言编程思维和动态语言编程思维的差别
        20
    raphaelsoul   2018-04-06 14:12:02 +08:00
    别适应了 我情况和你差不多...
    一边骂 java 一边哭着写。一种被猛男操哭的感觉
    最近上手 ts 感觉非常良好 js 代码一下子就安全舒服多了
        21
    Cbdy   2018-04-06 14:33:58 +08:00 via Android
    @noe132 ts 了解一下
        22
    janus77   2018-04-06 14:52:55 +08:00
    不要适应,就当零基础的去学
    差别太大没法类比的
        23
    lihongjie0209   2018-04-06 14:56:41 +08:00   ♥ 1
    喜欢直接用动态语言 Map 直接处理 Json 的, 不知道你们如何对下面的 Json 做校验呢(例子来自: http://json.org/example.html)

    如果直接用 Map, 请问这么写你们不胆战心惊吗: Json["web-app"]["servlet"]["servlet-name"]



    {"web-app": {
    "servlet": [
    {
    "servlet-name": "cofaxCDS",
    "servlet-class": "org.cofax.cds.CDSServlet",
    "init-param": {
    "configGlossary:installationAt": "Philadelphia, PA",
    "configGlossary:adminEmail": "[email protected]",
    "configGlossary:poweredBy": "Cofax",
    "configGlossary:poweredByIcon": "/images/cofax.gif",
    "configGlossary:staticPath": "/content/static",
    "templateProcessorClass": "org.cofax.WysiwygTemplate",
    "templateLoaderClass": "org.cofax.FilesTemplateLoader",
    "templatePath": "templates",
    "templateOverridePath": "",
    "defaultListTemplate": "listTemplate.htm",
    "defaultFileTemplate": "articleTemplate.htm",
    "useJSP": false,
    "jspListTemplate": "listTemplate.jsp",
    "jspFileTemplate": "articleTemplate.jsp",
    "cachePackageTagsTrack": 200,
    "cachePackageTagsStore": 200,
    "cachePackageTagsRefresh": 60,
    "cacheTemplatesTrack": 100,
    "cacheTemplatesStore": 50,
    "cacheTemplatesRefresh": 15,
    "cachePagesTrack": 200,
    "cachePagesStore": 100,
    "cachePagesRefresh": 10,
    "cachePagesDirtyRead": 10,
    "searchEngineListTemplate": "forSearchEnginesList.htm",
    "searchEngineFileTemplate": "forSearchEngines.htm",
    "searchEngineRobotsDb": "WEB-INF/robots.db",
    "useDataStore": true,
    "dataStoreClass": "org.cofax.SqlDataStore",
    "redirectionClass": "org.cofax.SqlRedirection",
    "dataStoreName": "cofax",
    "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver",
    "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
    "dataStoreUser": "sa",
    "dataStorePassword": "dataStoreTestQuery",
    "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';",
    "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log",
    "dataStoreInitConns": 10,
    "dataStoreMaxConns": 100,
    "dataStoreConnUsageLimit": 100,
    "dataStoreLogLevel": "debug",
    "maxUrlLength": 500}},
    {
    "servlet-name": "cofaxEmail",
    "servlet-class": "org.cofax.cds.EmailServlet",
    "init-param": {
    "mailHost": "mail1",
    "mailHostOverride": "mail2"}},
    {
    "servlet-name": "cofaxAdmin",
    "servlet-class": "org.cofax.cds.AdminServlet"},

    {
    "servlet-name": "fileServlet",
    "servlet-class": "org.cofax.cds.FileServlet"},
    {
    "servlet-name": "cofaxTools",
    "servlet-class": "org.cofax.cms.CofaxToolsServlet",
    "init-param": {
    "templatePath": "toolstemplates/",
    "log": 1,
    "logLocation": "/usr/local/tomcat/logs/CofaxTools.log",
    "logMaxSize": "",
    "dataLog": 1,
    "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log",
    "dataLogMaxSize": "",
    "removePageCache": "/content/admin/remove?cache=pages&id=",
    "removeTemplateCache": "/content/admin/remove?cache=templates&id=",
    "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder",
    "lookInContext": 1,
    "adminGroupID": 4,
    "betaServer": true}}],
    "servlet-mapping": {
    "cofaxCDS": "/",
    "cofaxEmail": "/cofaxutil/aemail/*",
    "cofaxAdmin": "/admin/*",
    "fileServlet": "/static/*",
    "cofaxTools": "/tools/*"},

    "taglib": {
    "taglib-uri": "cofax.tld",
    "taglib-location": "/WEB-INF/tlds/cofax.tld"}}}
        24
    orangeade   2018-04-06 15:01:02 +08:00 via Android
    @lihongjie0209
    python:
    dict.get('web-app', {}).get('xxxx', None)
    一个默认值的事
        25
    orangeade   2018-04-06 15:04:23 +08:00 via Android
    不想每次加默认值也有 default dict 这种内置数据结构
        26
    lihongjie0209   2018-04-06 15:16:38 +08:00
    @orangeade #24 把这个用 Python 写一下 Json["web-app"]["servlet"]["servlet-name"]
        27
    v2dead   2018-04-06 15:43:00 +08:00
    @lihongjie0209 你自己不都写出来了么?没错,python 字典也可以这么使用。就 Json["web-app"]["servlet"]["servlet-name"]就可以了。
        28
    jtsai   2018-04-06 15:45:35 +08:00   ♥ 1
    @lihongjie0209

    #3 JSON.parse() 哪里不麻烦

    首先要适应 Java 就要先承认 Java 是极其笨重和繁琐的语言, 然后自我催眠, 淡定 Java 的工资很高 淡定 Java 的工资很高 淡定 Java 的工资很高 ...
        29
    zjsxwc   2018-04-06 15:45:39 +08:00
    我从 java 转 php 等脚本语言后后再也不想写 java 了,太懒不想写
        30
    v2dead   2018-04-06 15:48:34 +08:00
    对了你说校验或者胆颤心惊的问题么?容易出错的代码块为什么不加入异常捕获呢?你可以说我懒,或者效率问题,但是我都用这类脚本来实现业务了,这个效率是我第一优先考虑的问题么?
        31
    lihongjie0209   2018-04-06 15:55:41 +08:00
    @v2dead #27 如果其中一个是 None 呢? 我会 Python
        32
    lihongjie0209   2018-04-06 15:57:27 +08:00
    @v2dead #30 假如有 10 个字段, 一个是 None, 你 Try Cache 之后怎么处理, 全部放弃还是保留剩下的 9 个, 如果保留, 怎么实现?
        33
    lihongjie0209   2018-04-06 15:59:29 +08:00
    @jtsai #28 一切都是 tradeoff, 写起来麻烦一点带来的是编译期安全, 写起来爽的带来的是运行期异常
        34
    lihongjie0209   2018-04-06 16:00:39 +08:00
    @v2dead #30 效率从来不是首先考虑的问题, 代码的健壮性才是
        35
    johnniang   2018-04-06 16:03:35 +08:00 via Android
    都在拿着其他语言的长处和 Java 的短处比,有意思么
        36
    lihongjie0209   2018-04-06 16:06:57 +08:00
    @johnniang #35 也是好事情, 其他语言的长处说明解决了一些痛点, Java 只要跟的上, 这些东西迟早内置到 JDK 中
        37
    shenjo   2018-04-06 16:09:20 +08:00
    @lihongjie0209 JS 里的话 lodash get 了解一下?
    const obj = {
    'web-app':{
    'servlet':{
    'servletName':'realName'
    }
    }

    }
    _.get(obj,'web-app.servlet.servletName') // realName
    _.get(obj,'web-app.unknown.servletName') // undefined
        38
    xiandao7997   2018-04-06 16:12:58 +08:00 via iPhone
    好奇用 java 的项目为啥不转到 kotlin 呢,是因为要额外的学习成本 人难招 还是各个框架的兼容性还不够?
        39
    v2dead   2018-04-06 16:13:19 +08:00
    @lihongjie0209 这么钻牛角尖就没意思了,怎么处理是业务的问题。不是需要怎么处理就怎么处理么?你会 Python 你自己不知道怎么保留 9 个么?要保留 9 个就保留 9 个呗。你这问题是在面试我么?
        40
    lihongjie0209   2018-04-06 16:16:16 +08:00
    @shenjo #37 这个不错, 假设有这样的代码 100 行, 如果我改变 Json 对象任意一个根节点的名称, 你需要修改多少行代码? 需要写多少单元测试才能确保不出错
        41
    lihongjie0209   2018-04-06 16:16:59 +08:00
    @v2dead #39 你把代码写出来就知道为什么不能这么做了
        42
    lihongjie0209   2018-04-06 16:19:17 +08:00   ♥ 1
    直接使用 Map 的问题不在于解析,异常处理, 而在于没有封装, 任意一个改动都会导致大量的代码修改
        43
    yaoliyc   2018-04-06 16:24:01 +08:00 via iPhone
    @lxy 自由不是没有代价的,java 通过类将数据结构描述清楚集中在一起,js 之类键值对基本分散在各处,各有利弊。
        44
    starmoon1994   2018-04-06 16:24:02 +08:00
    是 maven 不好用?
    还是 Java 提供的基础类库少了?
        45
    kennylam777   2018-04-06 16:26:11 +08:00   ♥ 1
    @lxy 如果你用的 API 都有良好的 documentation, 或者是 Swagger 那種按 API 定義自動生成的, 你應該會覺得把 json 結構寫成 class 會舒服很多

    如果寫後台都是隨心所欲的在改結構又不給 doc, 那我才擔心這種設計合作起來會異常麻煩

    最怕那種會直接返回不同結構的 API, 奇怪的狀況要動用 json parser 處理而不是 status code, 根本是浪費大家時間
        46
    deadEgg   2018-04-06 16:26:34 +08:00   ♥ 1
    java oo 的东西顺手起来会觉着爽到
        47
    bbzt   2018-04-06 16:30:18 +08:00
    @lihongjie0209 #23

    请问这么写你不胆战心惊吗: Json.webApp.servlet.servletName
        48
    lihongjie0209   2018-04-06 16:32:59 +08:00
    @bbzt 我会封装成 Json.getservletName(), 随便怎么改都可以
        49
    bbzt   2018-04-06 16:36:58 +08:00
    @lihongjie0209 #48

    在新版 js 里也可以用 class 方式的写法,抓着十年前 es5 这种老版 js 问题,没意思
        50
    kennylam777   2018-04-06 16:41:52 +08:00
    拿 23 樓那種超長的例子來說, 如果只是有一天 web-app.servlet.servlet-name 改成了 web-app.servlet.servlet-id

    如果有結構封裝, 要改代碼的話, 就把封裝 json 結構的 class 找出來改掉
    class servlet{
    String servlet-name;
    }

    直接用 IDE 的 refactor 改成新的 field 名字, 這樣引到用這 field 的地方都會自動改掉, 引用 1 次還是 100 次都沒差
    class servlet{
    String servlet-id;
    }

    沒有封裝的話, 如果用 Json["web-app"]["servlet"]["servlet-name"] 的, 嗯, 你們就慢慢手動的 search,再看看是否相關, 然後才 replace......這種 code 你自己用得開心就好, 不要留下來了
        51
    lihongjie0209   2018-04-06 16:42:39 +08:00
    @bbzt #49 浏览器支持率多少?
        52
    bbzt   2018-04-06 16:48:13 +08:00
    @lihongjie0209 #51

    浏览器端 babel 编译新版 js 代码到 es5 就行。
    服务器端 nodejs 都支持的
        53
    lihongjie0209   2018-04-06 16:50:49 +08:00
    @xiandao7997 #38 主要原因是没有必须迁移的原因, 我没有用过 kotlin, 但是迁移造成的影响是可知的
    1. BUG: 新的语言和框架必然有 BUG, 也就是稳定性没有经过时间的考验, 除了问题谁负责解决?
    2. 人力成本: 开发者必然需要投入时间学习, 甚至需要经过一两个项目才能完全迁移到新的语言
    3. 历史包袱: 已有的基础设施是否可以重用, 不可重用的话也要做迁移, 迁移之后还要测试维护.
    4. 开发者个人体验: 对于项目组来说, 不关心.
        54
    lihongjie0209   2018-04-06 16:54:19 +08:00
    @bbzt #52 既然有 Babel, 那么也要配一个 webpack 吧, 然后 npm 安装上百个依赖, 最后我可以开心的用 class 了
        55
    bbzt   2018-04-06 16:57:37 +08:00
    @lihongjie0209 #54

    然而这些事情,IDE 都自动帮你干了,你只需写代码就行
        56
    lihongjie0209   2018-04-06 16:58:49 +08:00
    @bbzt #55 那还要 webpack 配置工程师干嘛
        57
    orangeade   2018-04-06 17:04:01 +08:00
    @kennylam777 #45
    @lihongjie0209 #42
    这又不是 Java 的专利,json 封装为对象方式那么多

    https://stackoverflow.com/questions/6578986/how-to-convert-json-data-into-a-python-object
        58
    l30n   2018-04-06 17:05:27 +08:00 via Android
    Java 刚转前端,累啊
        59
    lihongjie0209   2018-04-06 17:08:57 +08:00
    @orangeade #57 该个字段名称试试
        60
    kennylam777   2018-04-06 17:11:03 +08:00
    @orangeade
    對我來說, 只要有封裝的都是可行的設計方法, 我還有用 Golang 呢, 近來在練 Kotlin
        61
    v2dead   2018-04-06 17:12:35 +08:00   ♥ 2
    是否有封装这种问题的出现不应该取决于对 json 这一类外来数据的处理方式上面,而是来自良好的编码习惯。像这种看起来像是配置类的 json 数据,进行配置的时候必然是带封装的,因为可能要考虑配置变更或者是数据来源的不同,但怎么处理 json 是另外的问题。不是说用 map 处理我就不能做封装了,对待不同的行为的时候做法也是完全不一样的。
    比方这个 json 数据来源现在是来自外部消息处理,外部消息是不可靠而且来源多样的,根本无法去做各类预设,而且也不会扩散到其他的业务模块,这时候提前设定结构就是很蠢的设定。数据源怎么解析,和是否封装良好没有直接关系。
        62
    qinxi   2018-04-06 17:19:21 +08:00
    以前用 java 写后台.现在用 node 要学 ES6 7 ts webpack express
        63
    lihongjie0209   2018-04-06 17:25:51 +08:00
    @v2dead #61
    是否有封装这种问题的出现不应该取决于对 json 这一类外来数据的处理方式上面,而是来自良好的编码习惯。
    反驳: 封装就是取决与如何对 Json 建模, 如果用 Map, 那么你就把 Json 的内部结构完全暴露给客户端. 良好的编码习惯就是 information hiding.

    数据源怎么解析,和是否封装良好没有直接关系。
    反驳: 这点我同意, 数据源的解析应该封装起来, 不被客户端知道, 问题是你解析完成之后你给客户端返回什么? Map? 和不封装没什么区别. 对象? 那么你就要预先定义好接口, 那么就和你说的第二段话矛盾了.
        64
    ipwx   2018-04-06 17:26:19 +08:00
    @lihongjie0209 我觉得 @v2dead 说的很对。你举的这个例子,这么冗长复杂的配置文件,在别的语言里面是不受待见的。像 Python、JS 处理 JSON 对象,一般只会出现在 API 接口处,然后立刻就处理掉了,没多少机会传播到别的地方的。所以也就没有什么不容易重构的坑了。
        65
    lihongjie0209   2018-04-06 17:27:20 +08:00
    @qinxi #62 这就是我不喜欢前端的原因, 一个语言社区应该做的事情让每一个开发者都做一遍, 浪费多少时间
        66
    ipwx   2018-04-06 17:27:28 +08:00
    @lihongjie0209 另外你太小看 IDE 了。Webstorm 完全可以重构代码里面看得到结构的对象( return {a: xxx, b: xxx} 这种),用起来和 Java 定义过的结构没有本质区别。
        67
    lihongjie0209   2018-04-06 17:30:01 +08:00
    @ipwx #64 首先, 这只是一个从 Json 官网拿下来的例子. 其次, 这种大对象我做的项目中随便都能找到, 应该每个项目都有. 最后你提到的处理那应该是会给调用者返回一个 Map 或者对象, 请问具体是怎么处理的
        68
    lihongjie0209   2018-04-06 17:31:30 +08:00
    @ipwx #66 动态语言的重构从来都不简单甚至是信不过的, 更不要说涉及到字符串了
        69
    kennylam777   2018-04-06 17:31:47 +08:00
    @v2dead 如果是外部不確定的來源, 做一個非完整的 sturct 就好, 只為需要的(needed)及已知的(known)的地方寫 fields, 像 jackson 般就是可以把沒定義的 fields 全放在 map 之中, 兩者兼顧到

    如果整天接到的 json 都是亂來的, 也就認了
        70
    v2dead   2018-04-06 17:38:11 +08:00
    可能我们的封装不是一个层次的,就拿配置说事,我的意思是外部请求配置必然有明确的接口,确定的结构。而数据源解析只是这个配置下的一小部分,如果封装就是指对 json 建模这种粗浅的事情了,我问你现在配置来源变成 xml 了呢?变成 properties 了呢?你的建模又如何处理?我个人喜好用 map 去处理原始 json,并不意味着我要暴漏细节给我的用户。
        71
    jinsongzhao   2018-04-06 17:58:37 +08:00 via Android
    @raphaelsoul 由衷的笑了。
        72
    jinsongzhao   2018-04-06 18:09:44 +08:00 via Android   ♥ 1
    从 C++到 C#,再 JAVA 和 JS,写久了 JAVA 代码,体会是,代码会越来越精简,预组装越来越多,初始化速度越来越慢,总之猛男也有柔情。JS 则像个软妹子,时不时透出灵动,琢磨不透的美,总还是有读得懂软妹子心的柔情猛男呵!
        73
    hareandlion   2018-04-06 18:39:01 +08:00 via iPhone
    写 js 不用 ts 吗
        74
    liuxin5959   2018-04-06 18:49:09 +08:00
    @hareandlion TS 做不到像真正的强类型语言那样的束缚,再说由于架构问题只能用 Java。
        75
    night98   2018-04-06 18:59:13 +08:00
    json to object 插件了解一下。
    SpringMVC 可以自动将 JSON 转 Object,大多数时候不需要手动转啊
        76
    ostholz   2018-04-06 19:10:22 +08:00
    直接上 Kotlin
        77
    mandy0119   2018-04-06 19:10:40 +08:00
    记得加分号
        78
    wee911   2018-04-06 19:12:33 +08:00
    原因是你没理解各种数据结构,json 在 js 里当然很简单,其他任何语言都要用库转
        79
    wangxiaoaer   2018-04-06 19:44:31 +08:00
    太矫情了,你试没试过 go 这种 xx 一样语言,解析 json 你想死。
        80
    fiht   2018-04-06 20:11:25 +08:00
    当年在 vim 下写了半年 C,之后写什么语言都觉得这语言太特么的好用了。
    由俭入奢易 由奢入俭难
        81
    jjx   2018-04-06 20:15:15 +08:00
    vertx 然后用 js

    不过 jvm 上的多语言都有一个问题, 就是最后重心都会偏向 java, 同.net 重心偏向 c#一样, 导致其他语言的支持可能一开始能尽力,到最后只是过场或废弃

    从 vertx 的两个 blog, 一个用 babel 支持 es6, 一个用 ts 写 vertx 就可以看出来

    //https://vertx.io/blog/vert-x-es6-back-to-the-future/

    //https://vertx.io/blog/ecmascript-6-7-on-the-jvm-with-typescript-and-vert-x/
        82
    morning   2018-04-06 20:35:22 +08:00
    至少超过 17 位的数字不用转了 233
        83
    anubiskong   2018-04-06 20:44:57 +08:00
    你用过 JS 还能忍受 JAVA ?真是个人才
        84
    choulinlin   2018-04-06 20:51:41 +08:00 via Android
    @zjsxwc 你搞了几年 java 小弟也是学校学了 java 然后自学 不知看了多少 java 书和网页 就因为还没毕业发现 java 工作机会多 工资高 不过第一份工作一进公司 试用期就转了 php 一开始还不愿意 看不起 php 还想转回 java
    直到后来单干了 才发现 php 的好

    什么赚钱就什么好 不是取决于技术 而是取决于客户和市场和业务
        85
    hzw94   2018-04-06 21:06:40 +08:00
    我也转了 java 在搞,也是一个 json 转化都搞懵逼,只能看 java 同事都代码做
        86
    hotsymbol   2018-04-06 21:12:31 +08:00
    那是你不会。C#能救你
        87
    Delete   2018-04-06 22:30:58 +08:00
    JSON (JavaScript Object Notation, JS 对象标记)
        88
    murmur   2018-04-06 22:34:49 +08:00
    @ipwx webstorm 的重构
    呵呵
    你信你用吧

    弱语言怎么作也做不过 java c#天生这种带符号表的
        89
    rashawn   2018-04-07 01:00:38 +08:00 via iPhone
    @kennylam777 这个跟语言没啥关系吧 啥语言都能这么干啊
        90
    wekw   2018-04-07 02:31:08 +08:00
    思维转换是很难的,慢慢来吧
        91
    cyspy   2018-04-07 10:43:15 +08:00
    主要是 js 可以在 JSON 的几种数据类型之间随便互转,这必然会带来坑,API 设计靠小心一点。静态强类型语言不能互转的,但是当 JSON 结构变化的时候只要改一下模型类就行了,js 要在整个代码里面找哪里用到,坑太大
        92
    xrlin   2018-04-07 21:24:00 +08:00
    @murmur 用过 webstorm 写 js,但相比静态类型语言的支持还是太不傻瓜了,和装上插件的编辑器没多大区别。在重构、协作时就可以看出 ts 的用处了,希望 ts、assembly 能早日推广应用。
        93
    zhantss   2018-04-07 22:36:19 +08:00
    写几天 TS 适应一下静态类型

    然后 JSON 处理的问题,因为 js 本来对 json 就比较友好,所以会有比较大的落差,处理上找个序列化框架就可以啦

    Maven 开始会用就行,看个 get started

    Spring 这算是事实基础了,没办法硬着头皮上吧,不过一般的项目我觉得吧,用的也不是特别深入,把原理和常用的配置注解看一下,写一段时间就熟能生巧了
        94
    print1024   2018-04-08 07:37:18 +08:00
    对于 JSON 可以使用 Jackson 或者 阿里的 fastjson
        95
    zjsxwc   2018-04-08 20:56:41 +08:00 via Android
    @choulinlin

    一年多企业内部 Java 系统,后来带我的大神创业去他朋友公司写 php,于是我也一起去了,当时那个公司程序员都是 Java 转 php,我也是那时后入坑 symfony
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1306 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 30ms · UTC 17:47 · PVG 01:47 · LAX 10:47 · JFK 13:47
    ♥ Do have faith in what you're doing.