Python 資料轉換成「字串包 JSON 陣列」的完整教學

更新於 發佈於 閱讀時間約 9 分鐘

1️⃣ 問題背景

在自動化、MES/SFCS、WebService 整合時,Python 常需將一組 dict 陣列(list of dict)包成字串,再塞進 JSON 的某個欄位

這是因為**對方系統(如 LabVIEW、C# WebService)**僅接受「字串型態」的 JSON array,而不是直接的物件或陣列。

你遇到的現象

  • Python 端假設原始資料
    fruit_quality_list = [
    {"Item": "Apple", "Weight": "150", "Color": "Red", "Sweetness": "High"},
    {"Item": "Banana", "Weight": "120", "Color": "Yellow", "Sweetness": "Medium"}
    ]
  • 對方系統需求
    不是直接傳陣列,而是要這樣:
    {
    "ItemName": "FruitQualityList",
    "ItemValue": "[{\"Item\":\"Apple\",\"Weight\":\"150\",\"Color\":\"Red\",\"Sweetness\":\"High\"},{\"Item\":\"Banana\",\"Weight\":\"120\",\"Color\":\"Yellow\",\"Sweetness\":\"Medium\"}]"
    }
  • 常見錯誤
    • 手動組字串,格式錯誤
    • 少了 escape,或多了不該有的引號
    • 對方解析報錯:Error converting value "Item" to type ...

2️⃣ Python 正確轉換步驟

步驟一:組好你的 list of dict

fruit_quality_list = [
{"Item": "Apple", "Weight": "150", "Color": "Red", "Sweetness": "High"},
{"Item": "Banana", "Weight": "120", "Color": "Yellow", "Sweetness": "Medium"}
]

步驟二:用 json.dumps() 轉成字串

import json
fruit_quality_list_str = json.dumps(fruit_quality_list, ensure_ascii=False)
  • 這樣 fruit_quality_list_str 就是:
    [{"Item": "Apple", "Weight": "150", "Color": "Red", "Sweetness": "High"}, {"Item": "Banana", "Weight": "120", "Color": "Yellow", "Sweetness": "Medium"}]
  • 注意: 這是「字串型態」的 JSON 陣列,裡面每個元素都是物件。

步驟三:塞進你的 Items

items = [
{"ItemName": "FruitQualityList", "ItemValue": fruit_quality_list_str}
]

步驟四:包進最終 JSON

final_data = {
"MachineID": "LINE01",
"Items": items
}
  • 用 json.dumps(final_data, ensure_ascii=False) 送出即可。

3️⃣ 常見錯誤與排查

錯誤 1:手動組字串,格式錯誤

# 錯誤寫法
fruit_quality_list_str = '[\"Item\":\"Apple\",\"Weight\":\"150\"]'
# 這不是合法的 JSON 陣列!

錯誤 2:少了大括號

# 錯誤寫法
fruit_quality_list_str = '["Item":"Apple","Weight":"150"]'
# 這不是物件,是 key:value 錯誤組合

錯誤 3:多了不該有的 escape 或引號

  • 只要用 json.dumps(),Python 會自動處理所有 escape,不要手動加斜線或引號

錯誤 4:對方系統報錯

  • Error converting value "Item" to type ...
    代表你傳過去的不是物件陣列,而是 key:value 字串。

排查建議

  1. 本地先 print 出來,貼到 JSONLint 驗證格式。
  2. 用 Python 反序列化測試
    python複製程式碼json.loads(fruit_quality_list_str)
    如果能正常 parse,格式就對了。

4️⃣ 跨語言注意事項

LabVIEW

  • LabVIEW 解析 JSON 時,常只能接受「字串型態」的 JSON array。
  • 請確保你傳過去的是「字串」,不是 Python 的 list 物件。

C# WebService

  • C# 端通常會用 JArray.Parse() 或 JsonConvert.DeserializeObject<List<T>>() 解析。
  • 如果你傳的是錯誤格式(如 key:value 字串),C# 會報型別錯誤。

WebService/REST API

  • 有些 API 會要求你把複雜資料塞在某個欄位(如 ItemValue),這時就要用「字串包 JSON 陣列」。
  • 請務必用 json.dumps(),不要手動組字串。

5️⃣ 實戰技巧

  • 永遠用 json.dumps() 處理,不要手動組字串。
  • 本地測試:先用 json.loads() 反序列化,確保格式正確。
  • 跨語言溝通:跟對方確認「要字串還是物件」,避免誤會。
  • 遇到錯誤訊息:仔細看是哪個欄位、哪個型別,通常都是格式問題。

6️⃣ 完整範例

import json

# Step 1: 組資料
fruit_quality_list = [
{"Item": "Apple", "Weight": "150", "Color": "Red", "Sweetness": "High"},
{"Item": "Banana", "Weight": "120", "Color": "Yellow", "Sweetness": "Medium"}
]

# Step 2: 轉成 JSON 字串
fruit_quality_list_str = json.dumps(fruit_quality_list, ensure_ascii=False)

# Step 3: 塞進 Items
items = [
{"ItemName": "FruitQualityList", "ItemValue": fruit_quality_list_str}
]

# Step 4: 組最終資料
final_data = {
"MachineID": "LINE01",
"Items": items
}

# Step 5: 送出前可 print 檢查
print(json.dumps(final_data, ensure_ascii=False, indent=2))

輸出結果

{
"MachineID": "LINE01",
"Items": [
{
"ItemName": "FruitQualityList",
"ItemValue": "[{\"Item\": \"Apple\", \"Weight\": \"150\", \"Color\": \"Red\", \"Sweetness\": \"High\"}, {\"Item\": \"Banana\", \"Weight\": \"120\", \"Color\": \"Yellow\", \"Sweetness\": \"Medium\"}]"
}
]
}

7️⃣ 結論

  • 跨語言資料交換時,格式最重要!
  • 用 Python 的 json.dumps() 處理一切 JSON 字串化需求。
  • 遇到解析錯誤,先驗證你產生的 JSON 字串格式!
留言
avatar-img
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
150會員
294內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
本文介紹了在進行資料分析時,將類別欄位轉換為數值欄位的方法,包括Label Encoding、One-Hot Encoding、Binary Encoding、Target Encoding和Frequency Encoding。每種方法的應用範例、優缺點和適用場景都有詳細說明。
Thumbnail
本文介紹了在進行資料分析時,將類別欄位轉換為數值欄位的方法,包括Label Encoding、One-Hot Encoding、Binary Encoding、Target Encoding和Frequency Encoding。每種方法的應用範例、優缺點和適用場景都有詳細說明。
Thumbnail
我們在學習kafka的過程中最不習慣的就是不管什麼樣的資料, 在kafka的傳輸過程都會是binary的資料格式, 因此我們在撰寫程式的過程中並不是那麼的直觀, 必須將資料從float、int…資料型態轉型成binary才能順利傳送, 那麼基於這樣的前提之下, python這套程式語言可以怎麼做
Thumbnail
我們在學習kafka的過程中最不習慣的就是不管什麼樣的資料, 在kafka的傳輸過程都會是binary的資料格式, 因此我們在撰寫程式的過程中並不是那麼的直觀, 必須將資料從float、int…資料型態轉型成binary才能順利傳送, 那麼基於這樣的前提之下, python這套程式語言可以怎麼做
Thumbnail
介紹如何用assign函數在Python中建立新欄位
Thumbnail
介紹如何用assign函數在Python中建立新欄位
Thumbnail
JSON(JavaScript Object Notation)是一種用於資料交換的輕量級資料格式,通常用於網路應用程式之間的資料傳遞。 JSON的格式易於閱讀和撰寫,也易於解析和產生,因此它在開發中被廣泛使用。 JSON由兩種結構組成:物件(Object)和陣列(Array)。
Thumbnail
JSON(JavaScript Object Notation)是一種用於資料交換的輕量級資料格式,通常用於網路應用程式之間的資料傳遞。 JSON的格式易於閱讀和撰寫,也易於解析和產生,因此它在開發中被廣泛使用。 JSON由兩種結構組成:物件(Object)和陣列(Array)。
Thumbnail
本文將介紹如何用Python繪製群組直條圖。
Thumbnail
本文將介紹如何用Python繪製群組直條圖。
Thumbnail
本文介紹了如何使用資料樞紐分析的功能來整理所需的資料,並設定圖表的中文字型,最後提供了繪圖的程式碼範例。
Thumbnail
本文介紹了如何使用資料樞紐分析的功能來整理所需的資料,並設定圖表的中文字型,最後提供了繪圖的程式碼範例。
Thumbnail
f字符串(f-string)在Python 3.6版本引入了新特性,可以更方便地格式化字符串。本文介紹了f-string的基本使用方法,以及表達式、運算符、格式化控制、字典和列表的應用,以及調用方法和函數等。f-string提供了一種更靈活的方式,使你能夠控制字符串的外觀,以滿足不同情況下的需求。
Thumbnail
f字符串(f-string)在Python 3.6版本引入了新特性,可以更方便地格式化字符串。本文介紹了f-string的基本使用方法,以及表達式、運算符、格式化控制、字典和列表的應用,以及調用方法和函數等。f-string提供了一種更靈活的方式,使你能夠控制字符串的外觀,以滿足不同情況下的需求。
Thumbnail
在日常中我們都會將很多事物定上了一個標籤,例如將商品標記價格,替孩子取姓名,公司上冠上職稱等等。 在Python中也有這種方法,就是字典的形式{ 'name' : 'crab', 'apple', 1000 }去呈現
Thumbnail
在日常中我們都會將很多事物定上了一個標籤,例如將商品標記價格,替孩子取姓名,公司上冠上職稱等等。 在Python中也有這種方法,就是字典的形式{ 'name' : 'crab', 'apple', 1000 }去呈現
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News