You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用NeoJSON时,如何将嵌套JSON的内部属性映射到Pharo对象?

如何用NeoJSON将嵌套JSON属性映射到Pharo对象?

问题描述

给定如下JSON数据:

{
  "id": 12,
  "fields": {
    "name": "Hello Pharo"
  }
}

需要将其反序列化为Pharo的MyObject类实例,该类包含id和name两个实例变量。目前已完成id的映射,但不知道如何处理嵌套在fields下的name属性。现有代码如下:

| reader |
reader := NeoJSONReader on: entity contents readStream.
reader
  for: MyObject
  do: [ :mapping | mapping mapInstVars: #( id ) ].
reader nextAs: MyObject

解决方案

在NeoJSON的映射配置中,你可以通过自定义取值逻辑提取嵌套的fields.name属性,直接赋值给MyObject的name实例变量。修改后的代码如下:

| reader |
reader := NeoJSONReader on: entity contents readStream.
reader
  for: MyObject
  do: [ :mapping |
    mapping mapInstVars: #( id ).
    // 从JSON对象的fields子节点中提取name属性
    mapping mapInstVar: #name to: [ :json | json at: 'fields' at: 'name' ] ].
reader nextAs: MyObject

代码说明

  • mapping mapInstVar: #name to: [ :json | ... ] 用于指定MyObject的name实例变量如何从JSON数据中取值。
  • 块参数json代表整个顶层JSON对象,先通过at: 'fields'获取嵌套子对象,再用at: 'name'取出目标属性值。

如果偏好更简洁的写法,也可以使用路径形式的映射:

mapping mapProperty: 'fields.name' to: #name

该写法和上述块逻辑效果完全一致。

内容的提问来源于stack exchange,提问作者Benoit Verhaeghe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 21:52:39