如何将指定JSON转换为Flutter对象?子键rates转换遇阻求助
解决方案:JSON转对象(处理嵌套的
rates键) 嘿,我来帮你搞定这个JSON转对象的问题!看起来你主要卡在嵌套的rates子对象转换上,下面我给你几个常用编程语言的具体实现,你可以对照自己的开发场景来用:
先把你的JSON内容贴出来方便参考:
{ "info": "Exchange Rates", "timestamp": "1558080000", "rates": { "USD": "1,536.7", "VND": "6.5693", "PHP": "29.184", "KRW": "128.60", "HKD": "195.77", "BRL": "379.62", "RSD": "14.557", "MYR": "367.94" } }
1. JavaScript/TypeScript 实现
在JS里直接用JSON.parse()就能快速转换,TS的话建议定义接口约束类型,避免类型错误:
JavaScript 示例:
const jsonStr = `{"info": "Exchange Rates", "timestamp": "1558080000", "rates": {"USD": "1,536.7", "VND": "6.5693", "PHP": "29.184", "KRW": "128.60", "HKD": "195.77", "BRL": "379.62", "RSD": "14.557", "MYR": "367.94"}}`; // 直接解析成原生对象 const exchangeData = JSON.parse(jsonStr); // 访问rates里的属性 console.log(exchangeData.rates.USD); // 输出 "1,536.7" // 如果需要做数值计算,记得先处理千分位逗号 const usdRate = parseFloat(exchangeData.rates.USD.replace(',', '')); console.log(usdRate); // 输出 1536.7
TypeScript 示例:
// 定义对应的数据接口 interface ExchangeRates { info: string; timestamp: string; rates: Record<string, string>; // 也可以写成具体的键值对类型,比如{ USD: string; VND: string; ... } } const jsonStr = `{"info": "Exchange Rates", "timestamp": "1558080000", "rates": {"USD": "1,536.7", "VND": "6.5693", "PHP": "29.184", "KRW": "128.60", "HKD": "195.77", "BRL": "379.62", "RSD": "14.557", "MYR": "367.94"}}`; // 类型安全地解析 const exchangeData: ExchangeRates = JSON.parse(jsonStr); // 访问rates中的数据 console.log(exchangeData.rates.PHP); // 输出 "29.184"
2. Java 实现
Java可以用Jackson或Gson库来转换,这里以Jackson为例:
第一步:定义对应实体类
import com.fasterxml.jackson.annotation.JsonProperty; public class ExchangeData { private String info; private String timestamp; // 嵌套的Rates对象 private Rates rates; // Getter & Setter 方法 public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } public String getTimestamp() { return timestamp; } public void setTimestamp(String timestamp) { this.timestamp = timestamp; } public Rates getRates() { return rates; } public void setRates(Rates rates) { this.rates = rates; } // 内部类定义Rates结构 public static class Rates { @JsonProperty("USD") private String usd; @JsonProperty("VND") private String vnd; @JsonProperty("PHP") private String php; @JsonProperty("KRW") private String krw; @JsonProperty("HKD") private String hkd; @JsonProperty("BRL") private String brl; @JsonProperty("RSD") private String rsd; @JsonProperty("MYR") private String myr; // 各属性的Getter & Setter 方法 public String getUsd() { return usd; } public void setUsd(String usd) { this.usd = usd; } public String getVnd() { return vnd; } public void setVnd(String vnd) { this.vnd = vnd; } // 其他属性的Getter & Setter 同理 } }
第二步:用Jackson解析JSON
import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static void main(String[] args) throws Exception { String jsonStr = "{ \"info\": \"Exchange Rates\", \"timestamp\": \"1558080000\", \"rates\": { \"USD\": \"1,536.7\", \"VND\": \"6.5693\", \"PHP\": \"29.184\", \"KRW\": \"128.60\", \"HKD\": \"195.77\", \"BRL\": \"379.62\", \"RSD\": \"14.557\", \"MYR\": \"367.94\" } }"; ObjectMapper objectMapper = new ObjectMapper(); ExchangeData exchangeData = objectMapper.readValue(jsonStr, ExchangeData.class); // 访问rates里的USD汇率 System.out.println(exchangeData.getRates().getUsd()); // 输出 "1,536.7" } }
3. Python 实现
Python用内置的json模块就能轻松处理:
import json json_str = '''{ "info": "Exchange Rates", "timestamp": "1558080000", "rates": { "USD": "1,536.7", "VND": "6.5693", "PHP": "29.184", "KRW": "128.60", "HKD": "195.77", "BRL": "379.62", "RSD": "14.557", "MYR": "367.94" } }''' # 解析成Python字典(等价于对象) exchange_data = json.loads(json_str) # 访问rates中的数据 print(exchange_data['rates']['USD']) # 输出 "1,536.7" # 转成数值的话处理逗号 usd_rate = float(exchange_data['rates']['USD'].replace(',', '')) print(usd_rate) # 输出 1536.7
小提示:
注意rates里的汇率值是带千分位逗号的字符串(比如USD的"1,536.7"),如果需要做数值计算,一定要先去掉逗号再转换为数字类型哦!
内容的提问来源于stack exchange,提问作者Ye Yint
相关产品推荐
相关产品推荐

