Перечислите объект в json в flutter

#json #flutter #provider

#json #flutter #поставщик

Вопрос:

Здравствуйте, я новичок в flutter, и есть этот объект, который содержит все сведения о продуктах, поэтому, когда товар добавляется в корзину, я хочу, чтобы он сохранял все детали в формате json, чтобы я мог получить его позже.

вот класс items

 class Item {
String productName;
String productImage;
int productQuatity;
int productId;
double productPrice;
String productColor;
String productSize;

Item(this.productName, this.productImage, this.productQuatity, this.productId, this.productPrice, this.productColor, this.productSize);

  Map toJson() => {
    'id': productId.toString(),
    'productName': productName.toString(),
    'colors': {
      'type': productColor.toString(),
      'sizes': {'type': productSize.toString(), 'amount': productQuatity}
    },
  };
  }
  

это также уведомление о добавлении элемента

 class AddItemNotifiy extends ChangeNotifier {
 List<Item> listItem = [];
 List<FinalProducts> finalProducts = [];
  addItem(String productName, String productImage, int productQuatity, int productId, double productPrice, String productColor, String productSize) async {
  Item item = Item(productName, productImage, productQuatity, productId, productPrice, productColor, productSize);
   listItem.add(item);

   notifyListeners();
    }

   void removeItem(Item _item) async {
   listItem.remove(_item);
   notifyListeners();
   }

 void toJsonForm(Item item) async {
 SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
  String currency;
  List<String> myList = List<String>(listItem.length);
   for (var i = 0; i <= listItem.length - 1; i  ) {
    myList[i] = listItem[i].toJson().toString();
   }
    sharedPreferences.setString('productList',myList.toString() );
    currency = sharedPreferences.getString("productList");

    print(jsonDecode (myList));

 }
}
  

вывод выглядит так

      [{_id: 2, productName: Updated name, colors: {type: grey, sizes: {type: m, amount: 10}}},{_id: 2, productName: Updated name, colors: {type: grey, sizes: {type: m, amount: 10}}}]
  

но я хочу, чтобы это было так

  [
{
    Id: "2",
    colors: [
        {
            type: "black",
            size: {
                type: 46,
                amount: 2
            }
        }
    ]
},
{
    Id: "2",
    colors: [
        {
            type: "red",
            size: {
                type: 46,
                amount: 2
            }
        }
    ]
},  
]
  

Я также использовал provider для управления состоянием

Ответ №1:

Вы можете использовать jsonEncode для преобразования объекта в строку JSON.

Это должно сработать:

 var myList = listItem.map((el) => el.toJson()).toList();

// Save the list as a string
sharedPreferences.setString('productList', myList.toString());

// Convert the list to a JSON string
print(jsonEncode(myList));
  

Комментарии:

1. привет, я просто реализую ваше предложение, и результат выглядит так. ` [ { «Идентификатор»: «2», «цвета»: [ { «тип»: «черный», «размер»: { «тип»: 46, «количество»: 2 } } ] }, { » Идентификатор»: «2», «цвета»: [{ «тип»: «красный», «размер»: { «тип»: 46, «количество»: 2 } } ] }, ]`

2. но я не хочу, чтобы ключи были в двойных кавычках, таких как «id»

3. Привет @HaptomeHadush. Почему это? Вы просили сохранить ваши данные в формате JSON. А в формате JSON ключи должны быть заключены в кавычки. Ссылка: json.org/json-en.html

4. Привет @Matthias итак, вот в чем дело, данные представляются следующим образом (я использовал GraphQL), вот почему. postOrder( продукты: [ {_id: «2», ProductName: «Обновленное имя», цвета: { тип: «серый», размеры: { тип: «m»,количество: 10}}}, {_id: «2», ProductName: «Обновленное имя», цвета: { тип: «серый», размеры: {тип: «m», количество: 12}}}], ) }

5. @HaptomeHadush — это уже не JSON, а что-то вроде JSON. Вероятно, вам следует исправить получателя данных.