• 週六. 3 月 28th, 2026

天南訊息

IT 工作者的工作紀錄

dBase 2019 的 JSON class 操作邏輯

個人頭像照片

By伍芳左

2 月 18, 2026

一、關鍵觀念(很重要)

在 dBase 2019 的 JSON 類別中:

  • js.findMember("xxx")

    • 會把 js.member 指到找到的那個成員

  • js.member

    • 是「目前找到的成員

  • 如果該 member 是 object

    • 你必須用 js.member.findMember("yyy")

    • 找到後,結果會存在:

      js.member.member

      ⚠ 這是兩層!

這一行

  • ? "find prop1", js.member.findmember("prop1")

現在狀態變成:

  • js.member → 還是 subObj
  • js.member.member → 指向 prop1

這一行有問題

? "name and value", js.member.member.name

錯誤原因:

js.member.member 只有在 成功 findMember() 之後才存在

如果 findMember("prop1") 回傳 False
或 subObj 不是 object
就會錯。


❌ 更大的問題在這裡

? "find prop2", js.member.findmember("prop2")

⚠ 注意!

你現在的 js.member 仍然是:

subObj

是正確的。

但如果你中間有改過 js.member = js.member.member
就會出錯。


三、真正潛在錯誤點

問題 1:沒有檢查 findMember 回傳值

應該這樣寫:

if js.findMember("subObj")
if js.member.findMember("prop1")
? js.member.member.name, js.member.member.value
endif
endif

否則找不到時會 error。


問題 2:你忘了 value 可能是字串

"prop1" : 123

是數值 ✔

js.member.value

若是 object,會回傳 JSON 文字,不是物件。


四、正確安全寫法(標準範例)

var = '{"ID":"1010","Name":"Marty","Address":"123 Main Street","subObj":{"prop1":123,"prop2":555}}'

js = new json()
js.parse(var)

if js.findMember(“subObj”)
if js.member.isObject()
if js.member.findMember(“prop1”)
? js.member.member.name, js.member.member.value
endif

if js.member.findMember(“prop2”)
? js.member.member.name, js.member.member.value
endif
endif
endif

個人頭像照片

By 伍芳左

MIS, ERP Pro... RHCE Member (7.2)

發表迴響