msgpack-javascript icon indicating copy to clipboard operation
msgpack-javascript copied to clipboard

Support a number as key in object when packing as MAP?

Open majianjia opened this issue 3 years ago • 7 comments

Hi,

I am developing a protocol in a resource constrain platform and suffer from very limited bandwidth. We are using map(integer: any) to transfer messages.

However, this lib only packs objects as map() while the "key" in the object is required to be a string. Using string adds at least additional 2 bytes compared to the integer, while the map(integer: bool or integer) can be only 3 bytes.

I understand this request is not commonly used in the web dev, but it is very useful for us to reduce the bandwidth.

Thanks,

majianjia avatar Aug 19 '21 21:08 majianjia

You can already use an Array as the data source of encode(), so once you "translate" your objects into arrays before passing them to encode(), the encoded objects will get smaller (and IIUC that's what ProtocolBuffers does).

gfx avatar Aug 20 '21 05:08 gfx

Thanks for the reply, I will try this method.

majianjia avatar Aug 20 '21 12:08 majianjia

I think this is important for interoperability, especially with Python, where integer keys are very common in maps.

To support I would perhaps have three: one that uses plain objects, one that uses Map, and one that calls a function asking whether to use a plain object or a Map when serializing/deserializing.

benatkin avatar Oct 21 '23 06:10 benatkin

I have the same issue. Would be fine if we could annotate fields in some TS interface and then it translated automatically into an object with such interface.

3da avatar Nov 22 '23 18:11 3da

same question. Object will automatically convert keys into string type, and Map objects are not supported. How to solve?

object or Map need to encode:

{ 1: 'hello', 2: 'world' }

yayiyao avatar Jan 10 '24 03:01 yayiyao

This is extremely important when encoding sparse arrays with very large indices, e.g. {45319: "foo", 97813: "bar"} and {[123, 321]: 0.1, [222, 333]: 0.2}

Aetherus avatar Jan 17 '24 08:01 Aetherus