Stringify числа в JSON как шестнадцатеричный (или другой) формат с использованием Javascript

1

Есть ли простой способ для преобразования чисел в шестнадцатеричный формат с использованием JSON.stringify? Например, если у меня есть структура JSON:

{
    number: 1024
}

В этом случае я хочу, чтобы вывод строки JSON был похож

{
    number: 0x400
}

JSON.stringify всегда возвращает числа в десятичном формате (основание 10).

  • 0
    0x... отформатированные числа недопустимы в формате JSON. Вы должны использовать функцию заменителя JSON.stringify для форматирования числа в строку "0x..." Почему вы хотите это?
  • 0
    @phuzi Я играю с Ethereum, особенно у меня проблема с RPC-совместимостью при использовании одного и того же вызова в Geth или Parity.
Теги:

2 ответа

1

Вы можете использовать replacer JSON.stringify

replacer получает key двумя параметрами и value строки. в этой функции вы хотели изменить тип числа с десятичного на шестнадцатеричный, поэтому мы проверяем, является ли тип числом, мы конвертируем его в шестнадцатеричный, используя метод toString() с основанием 16 а если нет, то возвращаем значение напрямую без каких-либо изменений.

const obj = { num1:1024,num2:1025,num3:1026,num4:1027 }

console.log(JSON.stringify(obj, (key, value) => {
  if( typeof value === 'number'){
    return '0x' + value.toString(16)
  }
  return value
}))
1

Вы можете использовать .toString(16) со своим номером.

var obj = {
  num1: 1024,
  num2: 1025,
  num3: 1026,
  num4: 1027
}
Object.keys(obj).forEach(e => obj[e] = "0x" + obj[e].toString(16))
console.log(JSON.stringify(obj))
  • 0
    так что я должен сделать это для каждого номера? Извините, если я не был достаточно ясен. Я бы потребовал это в случае большого объекта JSON.
  • 0
    @Alko Какая разница, если JSON равен "\"1024\"" или строка JSON имеет произвольную .length ?
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню