结构化和检索具有多种大小的 JSON 对象(图像)

Posted

技术标签:

【中文标题】结构化和检索具有多种大小的 JSON 对象(图像)【英文标题】:Structuring and retrieving JSON object (an image) with multiple sizes 【发布时间】:2021-08-19 05:08:06 【问题描述】:

这就是我目前的 JSON 数据结构:

[
  
    "slug": "image-1",
    "title": "Image 1",
    "img": "./images/folder1/Image-1.jpg",
    "sizes": [
      
        "title": "Image 1",
        "size": "Large",
        "price": "$1799",
      ,
      
        "title": "Image 1",
        "size": "Medium",
        "price": "$1299",
      ,
      
        "title": "Image 1",
        "size": "Small",
        "price": "$799",
      
    ]
  ,
  
    "slug": "image-2",
    ...
    ...
    ...
  
]

我正在映射尺寸并在单击“添加”按钮时调用 addToCart(size)。

模板.js:

const details = data.Json
const  addToCart  = useContext(GlobalContext)

// <h1>details.title</h1>
// <img src=details.img />
details.sizes.map((size, index) => 
  return (
    <h2>size.size</h2>
    <h2>size.price</h2>
    <button onClick=() => addToCart(size)>
      Add
    </button>
  )
)

GlobalState.js:

function addToCart(cartItem) 
  dispatch(
    type: "ADD_TO_CART",
    payload: cartItem,
  )

AppReducer.js:

export default (state, action) => 
  switch (action.type) 
    case "ADD_TO_CART":
      return 
        ...state,
        cartItems: [...state.cartItems, action.payload],
      

单击“添加”按钮后,购物车中将显示以下内容:

标题大小价格 图片 1 中 1299 美元

CartItem.js:

export const CartItem = ( cartItem ) => 
  return (
<Item>
  <p>cartItem.title</p>
  <p>cartItem.size</p>
  <p>cartItem.price</p>
</Item>
  )

现在这行得通;但是,我想从每个尺寸中删除标题,以便我的 JSON 数据如下所示:

[
  
    "slug": "image-1",
    "title": "Image 1",
    "img": "./images/folder1/Image-1.jpg",
    "sizes": [
      
        "size": "Large",
        "price": "$1799",
      ,
      
        "size": "Medium",
        "price": "$1299",
      ,
      
        "size": "Small",
        "price": "$799",
      
    ]
  ,
  
    "slug": "image-2",
    ...
    ...
    ...
  
]

我怎样才能将 details.titlesize 都传递到 addToCart() 中?

【问题讨论】:

【参考方案1】:

您可以将组件范围内的details.title 值代理到一个新对象中,其中包含大小属性。

// <h1>details.title</h1>
// <img src=details.img />
details.sizes.map((size, index) => 
  return (
    <h2>size.size</h2>
    <h2>size.price</h2>
    <button
      onClick=() => addToCart(
        title: details.title,
        ...size,
      )
    >
      Add
    </button>
  )
)

【讨论】:

以上是关于结构化和检索具有多种大小的 JSON 对象(图像)的主要内容,如果未能解决你的问题,请参考以下文章

ALAsset 图像大小

以 JSON 或 SQLITE (Android) 存储数据

如何将内容不同但结构相同的 JSON 字符串转换为 C# 对象?

如何保存具有特定文件大小的图像?

具有不同索引大小的 JSON 对象的架构

如何返回 JSON 对象